|  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 | 
|  |