Многократное использование курсора
От: DunenkoSergey  
Дата: 02.08.07 06:29
Оценка:
Для отображения данных в OracleDataSet пишется нетривиальный запрос. Для тестирования этого запроса создается package где в спецификации пакета создается курсор с этим запросом. В теле пакета открывеется курсор и проверяется правильность выборки. Как в делфи открыть этот курсор для отображения данных, чтоб дважды не хранить и не менять код одного и того же запроса для отображения и для тестирования.
Пример пакета

create or replace package A Is
cursor query_cur(val in integer)
IS select * from tt where tt.val = val;

procedure test1();
end;

create or replace package body A Is
begin
procedure test1() is
val integer := 9;
begin
....
open query_cur(val);
....
--проверки
close query_cur;
end;
end;


Я хотел в запросе OracleDataSet написать
begin
open :cur for A.query_cur(:val);
end;

Не проходит — пишет no function with name exists in the scope

попробовал в описании пакета объявить переменную курсора

type qury_cur_type is ref cursor;
procedure open_query(cr out query_cur_type, val in integer);


а в body добавил
procedure open_query(cr out query_cur_type, val in integer) is
begin
open cr for query_cur(val);
end;

Хотел в delphi передавать :cur в процедуру. Но процедура не компилится с тем же сообщением.

Как выйти из ситуации. Обрамлять запрос как текст и делать что-то типа

query varchar2(100) := 'select * from tt where tt.val=:val';

а потом открытвать курсор как open :cur for A.query using(:val) не хотелось бы. И на сколько это понизит производительность?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.