我有一个从ASP.NET应用程序访问的Oracle 10g数据库。虽然我在很多不同方面都使用过SQL Server,而Oracle却用于查询和报告,但这是我第一次将Oracle用作应用程序的OLTP数据库。
包中的数据库级过程通常采用以下形式:
-- TYPE refcur IS REF CURSOR;
PROCEDURE get_some_stuff(o_cursor OUT refcur, p_param1 IN INTEGER, p_param2 IN INTEGER) IS
BEGIN
OPEN o_cursor FOR
SELECT whatever
FROM whatever
END
我认为这些都是以这种方式完成的,因为ADO.NET层能够使用输出参数中的游标,我理解这是从.NET调用Oracle procs的最佳实践。
例如,在SQL Server中,如果proc返回结果集(或多个结果集),我们没有显式的ref游标,可以在ADO.NET和SSMS中作为输出结果集访问,并且可以通过EXEC spname param1, param2
来简单地测试SP。
我遇到的问题是我不知道如何在Toad中直接调用这些,例如,为了能够在转到应用程序之前先在PL / SQL级别测试更改。我非常习惯于在SQL Server中运行甚至重新混合存储过程和函数,以便能够重构数据库接口层,而不会影响应用程序级代码的外部接口。
答案 0 :(得分:3)
查看OMG Ponies发布的链接,但您可以做的是
var x refcursor;
declare
PROCEDURE GET_SOME_STUFF(O_CURSOR OUT SYS_REFCURSOR, P_PARAM1 IN NUMBER, P_PARAM2 IN NUMBER) IS
BEGIN
OPEN O_CURSOR FOR
SELECT LEVEL, p_param1 ,P_PARAM2 FROM DUAL CONNECT BY LEVEL < 3;
END ;
BEGIN
GET_SOME_STUFF(:x , 5, 10);
END;
/
PRINT X;
你几乎只是将它包装在一个将运行的匿名阻止广告中。我使用SQL Developer(强烈推荐,免费提供大量支持)或SQL plus,所以我无法帮助TOAD,但我希望它是相同的。在SQL Developer中(如果内存服务正确,则在SQL Navigator中),您只需右键单击所需的包/方法,它就会为您创建脚本。
在toad和navigator中我相信你可以将ref光标放在漂亮的网格中,而在开发人员中你可以用文本获取它。
答案 1 :(得分:2)
试试这个:
DECLARE
aCursor SYS_REFCURSOR;
someVariable SOME_TYPE;
FUNCTION SOME_FUNC_RETURNING_A_CURSOR RETURN SYS_REFCURSOR IS
csrLocal SYS_REFCURSOR;
BEGIN
OPEN csrLocal FOR SELECT whatever FROM wherever;
RETURN csrLocal;
END SOME_FUNC_RETURNING_A_CURSOR;
BEGIN
aCursor := SOME_FUNC_RETURNING_A_CURSOR;
WHILE TRUE LOOP
FETCH aCursor INTO someVariable;
EXIT WHEN aCursor%NOTFOUND;
...do whatever with variables...
END LOOP;
COMMIT;
END;
分享并享受。
答案 2 :(得分:1)
答案 3 :(得分:1)
我找到了一种更简单的方法...尝试一下(这也会为你生成脚本)
在“过程编辑器”中,加载您的过程。点击闪电 要执行的螺栓,您将看到“设置参数”窗口,即 也可以通过Proc Editor工具栏上的按钮获得 图像类似于(...),旁边是闪电。点击 输出选项按钮,您将看到您的选项。如果这是一个弱的参考 然后你必须使用内存中的网格选项。结果去了 执行后,PE底部的光标结果选项卡。
http://toad.10940.n7.nabble.com/display-ref-cursor-in-toad-td1427.html