使用.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:通信信道上的文件结尾
答案 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;