Как проверить хранимую процедуру Oracle с типом возврата RefCursor? - PullRequest
36 голосов
/ 21 июля 2011

Я ищу хорошее объяснение о том, как протестировать хранимую процедуру Oracle в SQL Developer или Embarcardero Rapid XE2.Спасибо.

Ответы [ 6 ]

62 голосов
/ 22 июля 2011

Что-то вроде

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, как этот.

21 голосов
/ 22 июля 2011

Примерно так можно проверить вашу процедуру практически на любом клиенте:

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 Developer, PL / SQL Developer, TOAD и т. Д.), Вы можете затем выполнить выполнение .

10 голосов
/ 20 июля 2012

В SQL Developer вы можете щелкнуть правой кнопкой мыши на теле пакета и выбрать RUN. Окно «Run PL / SQL» позволит вам редактировать блок PL / SQL. Нажатие ОК даст вам окно с заголовком «Выходные переменные - журнал» с вкладкой выходных переменных. Вы можете выбрать свои выходные переменные слева, а результат будет показан справа. Очень удобно и быстро.

Я использовал Rapid с T-SQL и думаю, что-то похожее на это.

Написание собственного скрипта delcare-begin-end, в котором вы перебираете курсор, как в примере с DCookie, всегда является хорошим упражнением, которое нужно делать время от времени. Он будет работать с чем угодно, и вы будете знать, что ваш код работает.

5 голосов
/ 08 июня 2015

В Toad 10.1.1.8 я использую:

variable salida refcursor
exec MY_PKG.MY_PRC(1, 2, 3, :salida)  -- 1, 2, 3 are params
print salida

Затем, Выполнить как скрипт.

3 голосов
/ 07 апреля 2014
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;
 /

и затем напишите функцию, которая вызывает вашу хранимую процедуру

 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;

вы будетечтобы увидеть результат в консоли, щелкните правой кнопкой мыши на нем, нажмите на просмотр одной записи и отредактируйте результат, чтобы увидеть все записи, которые были возвращены курсором ref.

1 голос
/ 27 сентября 2017

Думаю, этой ссылки вам будет достаточно.Я нашел его, когда искал способ выполнения процедур оракула. ​​

Ссылка на страницу

Краткое описание:

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