我有一个从ASP.NET应用程序访问的Oracle10g数据库。尽管我曾在许多不同方面大量使用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我假设这样做是为了让Oracle层能够使用来自输出参数的游标,我的理解是这是从.NET调用ADO.NET procs的可接受的最佳实践。
例如,在SQL Server中,我们没有显式的引用游标,如果进程返回一个结果集(或多个结果集),则该结果集在ADO.NET和SSMS中都可以作为输出结果集访问,并且您可以通过执行EXEC spname param1, param2来简单地测试SP。
我遇到的问题是,我不知道如何在Toad的SQL中直接调用它们,例如,在转到应用程序之前,能够首先在PL/SQL级别测试更改。我非常习惯于在SQL Server中练习甚至重新混合存储的过程和函数,以便能够重构数据库接口层,而不会影响应用程序级别代码的外部接口。
发布于 2010-10-29 02:53:20
发布于 2010-10-20 04:43:29
看看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中,我相信你可以在一个漂亮的网格中获得引用光标,而在developer中,你可以在文本中获得引用光标。
发布于 2010-10-20 05:24:05
试试这个:
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;分享和享受。
https://stackoverflow.com/questions/3972338
复制相似问题