сделал процедуру а как вызвать ее правильно не могу понять как

BeaRoman
Дата: 13.11.2008 12:55:40
привет.
Хорошо знаю MSSQL а вот Oracle только осваиваю.

есть такая процедура

create or replace procedure test1 (cur out sys_refcursor)
as
begin
open cur for
select * from obj;
end;

как вызвать ее и получить результат.

спасибо.
AlexFF__|
Дата: 13.11.2008 12:57:53
declare
INFO SYS_REFCURSOR;
BEGIN
test1( INFO );
END;
BeaRoman
Дата: 13.11.2008 13:02:06
хмм.... работает

а так чтоб на екран выводило что надо дописать еще?
andrey_anonymous
Дата: 13.11.2008 13:02:40
BeaRoman
Хорошо знаю MSSQL а вот Oracle только осваиваю.

Есть подозрение, что Вы пытаетесь провести аналогии между хранимками SQL Server и Oracle.
Не надо.
Позвать Вашу процедуру и получить результат несложно, однако, думаю, это не совсем то, что Вам на самом деле хотелось бы получить.
BeaRoman
Дата: 13.11.2008 13:13:03
ага..

я что-то похожее хочу сделать

я видел примеры с функциями но там надо объявлять тип с рекордами.

А мне надо по параметрам переданным в процедуру в ней собрать SQL запрос и вернуть результат в виде таблицы .

В MSSQL это стандартный способ.
Верю что в ORACLE тоже можно добиться такого результата только еще не нашел как.

В форуме искал еще больше запутался.
andrey_anonymous
Дата: 13.11.2008 13:25:07
BeaRoman
А мне надо по параметрам переданным в процедуру в ней собрать SQL запрос и вернуть результат в виде таблицы

В этом случае лучше всего обойтись без хранимок.
Подумайте - не можете ли Вы решить задачу, передавая параметры самому SQL-statement-у?
Процедура тут будет не очень удобна.
Но можно:
- вернуть коллекцию рекордов (табличная функция)
- сделать то же в режиме pipelined (pipelined функция)

В обоих случаях вызов будет выглядеть как
select * from TABLE(my_func(:par1,:par2...))
BeaRoman
Дата: 13.11.2008 13:29:16
гы..
прикольно.

ради интереса ADO из внешнего приложения вызвал процедуру и она мне в грид вернула результат...

таким бразом работает..

а самим pl/sql ,в toade к примеру, результат вернуть можно?
BeaRoman
Дата: 13.11.2008 13:37:15
приложение обращается к базе
все запросы должны хранится в базе.

я не хочу вкомпилировать SQL запросы в приложение.
Проще править процедуру на сервере чем компилить все приложение.


Такая схема хорошо работает в MSSQL.
Стоит задача попробовать такое-же реализовать в Oracle.
tru55
Дата: 13.11.2008 13:41:31
может для начала почитать доку, хотя бы
Application Developer’s Guide - Fundamentals
PL/SQL User’s Guide and Reference
andrey_anonymous
Дата: 13.11.2008 13:49:36
BeaRoman
Такая схема хорошо работает в MSSQL.
Стоит задача попробовать такое-же реализовать в Oracle.

Не стоит.
Если уж очень хочется - вычитывайте запросы из таблички при старте приложения и отправляйте из него же.
Oracle совсем другой. То, что общепринято в MS SQL часто является advanced в oracle и наоборот.
Не ищите приключений, особенно на начальных этапах освоения.