首页 文章

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

提问于
浏览
4

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

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发生错误:游标无效

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

EDIT 如果我修改执行立即声明以包含'OUT TABLEREF'而不是'TABLEREF'我的错误更改为... ORA-03113:通信通道上的文件结束

1 回答

  • 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;
    

相关问题