01.09.2003, 16:51 | #1 |
Участник
|
Как вызвать хранимую процедуру (функцию) Oracle и вернуть значение
Подскажите начинающему
Как осуществить сабж. Заранее благодарен. |
|
02.09.2003, 12:43 | #2 |
Moderator
|
Вот так это можно сделать в MS SQL:
http://www.axforum.info/forums/showt...E5%E4%F3%F0%E0 В Oracle принцип тот же, только вместо: PHP код:
PHP код:
Но я не специалист по Oracle - может кто-то подскажет лучший путь. |
|
02.09.2003, 15:38 | #3 |
Участник
|
Прошу прощение за не понятливость,
но не могли бы Вы по подробнее объяснить про оператор (или это функция, или класс) CALL |
|
02.09.2003, 17:13 | #4 |
Moderator
|
По ссылке, которую я привел есть кусок кода, в котором вызывается хранимая процедура на MS SQL. Осуществляется это посылкой вот такого запроса:
PHP код:
У Вас не MS SQL, у Вас Oracle и этот запрос будет выглядеть по другому, а именно так, как я написал. Цитата:
оператор (или это функция, или класс) CALL
Цитата:
Use the CALL statement to execute a routine (a standalone procedure or function, or a procedure or function defined within a type or package) from within SQL.
То есть у Вас будет нечто типа: PHP код:
|
|
02.09.2003, 17:58 | #5 |
Участник
|
Извиняюсь за настойчивость
при выполнении следующего кода: PHP код:
Error Сообщение (17:47:22) Невозможно выбрать запись в '' ('') База данных SQL обнаружила ошибку. Info Сообщение (17:47:22) Описание ошибки SQL: ORA-24333: zero iteration сount Info Сообщение (17:47:22) Оператор SQL: call axuser.bocTest01(5); Что я делаю не так? Заранее благодарен |
|
03.09.2003, 05:48 | #6 |
Участник
|
Старая и страшная тема.
Ну нет в оракле селективных процедур, НЕТУ!!! Можно изворачиваться по способу Андре - складывать результат процедуры во вполне обычную табличку, не забывая привинчивать имя пользователя к каждой строчке. Чтоб каши не было. Но это метод для ленивых. А для ОЧЕНЬ-ОЧЕНЬ ленивых есть более прикольный метод. На оракле выше 8.0 (нужно, чтоб возможность с объектами работать была) 1) создаем объектный тип данных навроде строки. 2) создаем таблица из этих строк. 3) делаем функцию, возвращающей значение типа нашей объектной таблицы. В теле функции наполняем выходной набор записей и 4) вызов функции выглядит как select * from the (select * from <имя функции>) НО. У данного способа кроме плюсов: 1) не болит голова с изоляцией пользователей и избавлением от результатов предыдущего запуска; 2) работает даже из-под Access-а. есть и минусы: 1) сложно отлаживать - все приходится делать вслепую. 2) (субъективное) 8.1.6 вел себя гораздо капризней, нежели в случае обычной процедуры PL/SQL - например, NULL вместо ожидаемого значения валил все выполнение. =================================== А вот по поводу примера - занимался сим извращением последний раз пол-года назад, примеров под рукой нет, но в свое время взял идею с форумов ораклоидов. |
|
03.09.2003, 11:00 | #7 |
Moderator
|
Цитата:
Получаю следующее сообщение:
Error Сообщение (17:47:22) Невозможно выбрать запись в '' ('') База данных SQL обнаружила ошибку. Info Сообщение (17:47:22) Описание ошибки SQL: ORA-24333: zero iteration сount Info Сообщение (17:47:22) Оператор SQL: call axuser.bocTest01(5); Что я делаю не так? PHP код:
PHP код:
PHP код:
Создаем табличку в БД: PHP код:
PHP код:
PHP код:
PHP код:
Теперь подключаем к этому делу Аксапту: PHP код:
|
|
03.09.2003, 11:22 | #8 |
Участник
|
Да, действительно все получилось
Огромное спасибо за помощь |
|
17.09.2003, 16:00 | #9 |
Moderator
|
PHP код:
PHP код:
|
|
29.09.2003, 18:21 | #10 |
Участник
|
Вроде в тему...
А курсор(DataSet) из процедуры получить можно? |
|
29.09.2003, 18:22 | #11 |
Участник
|
Все, нашел...
|
|
20.08.2004, 10:28 | #12 |
Соучастник
|
а как курсор вытащили в x++. расскажите?
__________________
View Anton Soldatov's LinkedIn profile |
|