【问题标题】:Calling PL/SQL cursor from stored procedure to get the result从存储过程中调用 PL/SQL 游标得到结果
【发布时间】:2016-07-05 03:51:03
【问题描述】:

这就是存储过程的样子

CREATE OR REPLACE PACKAGE TABLE.PROCEDURES IS

  type reference_cursor IS REF CURSOR;

  PROCEDURE get_attrs(output out reference_cursor) IS
  BEGIN
    OPEN output FOR
      SELECT *,
          FROM ATTRS a
         ORDER BY a.id;
  EXCEPTION
    WHEN OTHERS THEN
      RAISE;
  END get_attrs;
END PROCEDURES;
/

我想调用get_attrs存储过程,从reference_cursor类型的输出变量中获取输出。

这是我想出的,但它给了我以下错误。

DECLARE
  outputTABLE.PROCEDURES.reference_cursor;
  output_records TABLE.ATTRS%ROWTYPE;
  BEGIN TABLE.PROCEDURES.get_attrs(output);
      LOOP
        FETCH
        output INTO output_records;
        EXIT WHEN output_records%NOTFOUND;
        dbms_output.put_line(output_records.id);
      END LOOP;
  CLOSE output;
END;

还有错误

PLS-00324: cursor attribute may not be applied to non-cursor 'OUTPUT_RECORDS'

知道我做错了什么吗?

【问题讨论】:

    标签: database oracle stored-procedures plsql


    【解决方案1】:

    消息很清楚:您正在尝试在非光标元素上使用光标特定属性:OUTPUT_RECORDS

    事实上,CURSOR_RECORDS 不是游标,所以你需要检查你正在获取的游标上的%NOTFOUND,而不是你正在获取的变量:

    EXIT WHEN output%NOTFOUND;
    

    【讨论】:

      【解决方案2】:

      试试这个。希望对您有所帮助。

      SET SQLBL ON;
      SET DEFINE OFF;
      DECLARE
      output_tab ATTRS%ROWTYPE;
      BEGIN
        TABLE.PROCEDURES.get_attrs(output);
        LOOP
          FETCH output INTO output_tab;
          EXIT
        WHEN output%NOTFOUND;
          dbms_output.put_line(output_tab.id);
        END LOOP;
        CLOSE output;
      END;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-11
        • 1970-01-01
        • 1970-01-01
        • 2010-11-20
        • 2018-04-05
        相关资源
        最近更新 更多