我正在寻找有关如何在 SQL Developer 或 Embarcardero Rapid XE2 中测试 Oracle 存储过程的良好解释。谢谢你。
6 回答
就像是
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 命令。
这样的事情可以让您在几乎任何客户端上测试您的程序:
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 等),然后您可以逐步执行。
在 SQL Developer 中,您可以右键单击包主体,然后选择 RUN。“运行 PL/SQL”窗口将让您编辑 PL/SQL 块。单击“确定”将为您提供一个标题为“输出变量 - 日志”的窗口窗格,其中包含一个输出变量选项卡。您可以在左侧选择输出变量,结果显示在右侧。非常方便快捷。
我已经将 Rapid 与 T-SQL 一起使用,并且我认为有一些类似的东西。
编写您自己的 delcare-begin-end 脚本,在其中循环遍历光标,就像 DCookie 的示例一样,时不时地做一个很好的练习。它适用于任何东西,您将知道您的代码有效。
在 Toad 10.1.1.8 中,我使用:
variable salida refcursor
exec MY_PKG.MY_PRC(1, 2, 3, :salida) -- 1, 2, 3 are params
print salida
然后,作为脚本执行。
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 this 调用您的存储过程
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
/
然后您可以在 SQLDeveloper 编辑器中运行此 SQL 查询。
SELECT my_proc_test(3) FROM DUAL;
您将在控制台中看到结果,右键单击它并在单个记录视图上单击并编辑结果,您可以看到参考光标返回的所有记录。
我认为这个链接对你来说就足够了。我是在寻找执行oracle程序的方法时发现的。
简短的介绍:
--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;