Я ищу хорошее объяснение того, как тестировать хранимую процедуру Oracle в SQL Developer или Embarcardero Rapid XE2. Спасибо.
Как проверить хранимую процедуру Oracle с возвращаемым типом RefCursor?
Ответ 1
Что-то вроде
create or replace procedure my_proc( p_rc OUT SYS_REFCURSOR )
as
begin
open p_rc
for select 1 col1
from dual;
end;
/
variable rc refcursor;
exec my_proc( :rc );
print rc;
будет работать в SQL * Plus или SQL Developer. У меня нет опыта работы с Embarcardero Rapid XE2, поэтому я понятия не имею, поддерживает ли он такие команды SQL * Plus, как это.
Ответ 2
Что-то вроде этого позволяет протестировать вашу процедуру практически на любом клиенте:
DECLARE
v_cur SYS_REFCURSOR;
v_a VARCHAR2(10);
v_b VARCHAR2(10);
BEGIN
your_proc(v_cur);
LOOP
FETCH v_cur INTO v_a, v_b;
EXIT WHEN v_cur%NOTFOUND;
dbms_output.put_line(v_a || ' ' || v_b);
END LOOP;
CLOSE v_cur;
END;
В основном, ваша тестовая проводка должна поддерживать определение переменной SYS_REFCURSOR и возможность вызова вашей процедуры при передаче в указанной вами переменной, а затем прокручивать набор результатов курсора. PL/SQL делает все это, а анонимные блоки легко настраиваются и поддерживаются, достаточно адаптируются и вполне читаемы для всех, кто работает с PL/SQL.
Другой, хотя и аналогичный способ заключается в создании именованной процедуры, которая делает то же самое, и если у клиента есть отладчик (например, разработчик SQL, разработчик PL/SQL, TOAD и т.д.), вы можете затем выполнить выполнение.
Ответ 3
В SQL Developer вы можете щелкнуть правой кнопкой мыши по корпусу пакета и выбрать RUN. Окно "Запустить PL/SQL" позволит вам отредактировать PL/SQL-блок. При нажатии OK появится окно с названием "Output Variables - Log" с вкладкой "Output variables". Вы можете выбрать выходные переменные слева, а результат - с правой стороны. Очень удобно и быстро.
Я использовал Rapid с T-SQL, и я думаю, что было что-то похожее на это.
Написание собственного delcare-begin-end script, где вы прокручиваете курсор, как в примере с DCookie, всегда является хорошим упражнением, которое нужно делать время от времени. Он будет работать с чем угодно, и вы узнаете, что ваш код работает.
Ответ 4
В жабе 10.1.1.8 я использую:
variable salida refcursor
exec MY_PKG.MY_PRC(1, 2, 3, :salida) -- 1, 2, 3 are params
print salida
Затем выполните команду Script.
Ответ 5
create or replace procedure my_proc( v_number IN number,p_rc OUT SYS_REFCURSOR )
as
begin
open p_rc
for select 1 col1
from dual;
end;
/
а затем написать функцию lie, которая вызывает вашу хранимую процедуру
create or replace function my_proc_test(v_number IN NUMBER) RETURN sys_refcursor
as
p_rc sys_refcursor;
begin
my_proc(v_number,p_rc);
return p_rc;
end
/
то вы можете запустить этот SQL-запрос в редакторе SQLDeveloper.
SELECT my_proc_test(3) FROM DUAL;
вы увидите результат в правой панели консоли и cilck в режиме одиночной записи и отредактируйте результат, вы увидите все записи, которые были возвращены курсором ref.
Ответ 6
Я думаю, что этой ссылки будет достаточно для вас. Я нашел его, когда искал способ выполнения процедур оракула.
Краткое описание:
--cursor variable declaration
variable Out_Ref_Cursor refcursor;
--execute procedure
execute get_employees_name(IN_Variable,:Out_Ref_Cursor);
--display result referenced by ref cursor.
print Out_Ref_Cursor;