2016-07-05 46 views
-1

这是存储过程是什么样子调用PL/SQL游标得到结果

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' 

任何想法,我也许做错了吗?

回答

1

试试这个。希望能帮助到你。

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; 
+0

这将无法正常工作;你试过了吗? – Aleksej

+0

没有其他我没有工作空间wd我 –

+0

现在修改它。 –

2

消息已经足够清楚了:您试图在非游标元素上使用游标特定属性:OUTPUT_RECORDS

事实上,CURSOR_RECORDS是不是一个游标,所以你需要检查你取光标%NOTFOUND,不能对变量你取到:

EXIT WHEN output%NOTFOUND;