代码之家  ›  专栏  ›  技术社区  ›  Rob P.

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

  •  4
  • Rob P.  · 技术社区  · 14 年前

    使用.NET和Oracle11g-我通过打开光标从包内的过程返回了数据表。

    ie-'open tableref for somessql;其中tableref是'out'参数。它工作得很好。

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

    在proc1内部(它将tableRef作为out参数)-我正在执行一个execute immediate来调用proc2。proc2还将tableref定义为out参数,为somesql打开tableref。它编译得很好-但是当我尝试运行它时,我会得到以下错误:

    ORA-00604:递归SQL级别1出错 ORA-01001:无效的光标

    有人能告诉我我做错了什么吗?

    编辑 如果修改execute immediate语句以包含“out tableref”而不是“tableref”,则错误将更改为… ORA-03113:通信通道上的文件结束

    1 回复  |  直到 14 年前
        1
  •  1
  •   Quassnoi    14 年前

    在动态之间传递光标变量时 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;