Oracle存储过程 - 从打开游标的过程返回游标

时间:2010-03-05 17:38:38

标签: .net oracle stored-procedures

使用.Net和Oracle 11g - 我一直通过打开Cursor从包内的过程返回dataTable。

IE - '为SOMESQL打开TABLEREF; TableRef是'OUT'参数。它一直很好用。

我正在努力做的是让第一个Proc调用另一个Proc并让第二个Proc打开光标。

在Proc1内部(将TableRef作为OUT参数) - 我正在执行一个Execute Immediate来调用Proc2。 Proc2还将TableRef定义为out参数,OPEN TABLEREF FOR SOMESQL。这一切都很好 - 但是当我尝试运行它时;我收到以下错误:

ORA-00604:递归SQL级别1发生错误 ORA-01001:光标无效

谁能告诉我我做错了什么?

修改 如果我修改我的execute immediate语句以包含'OUT TABLEREF'而不是'TABLEREF',我的错误将更改为... ORA-03113:通信信道上的文件结尾

1 个答案:

答案 0 :(得分:1)

在动态SQL之间传递游标变量时,您可能需要将其声明为IN OUT

BEGIN
    EXECUTE IMMEDIATE '
    BEGIN
        EXECUTE IMMEDIATE ''BEGIN OPEN :tableRef FOR SELECT 1 FROM dual; END;'' USING IN OUT :tableRef;
    END;
    ' USING IN OUT :tableRef;
END;