2016-07-05 52 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;