Для отображения данных в 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) не хотелось бы. И на сколько это понизит производительность?