我正在使用Oracle XE的HR數據庫學習PL/SQL。如何在匿名PL/SQL塊中使用out遊標參數執行oracle過程?
我創建了以下存儲過程:
CREATE OR REPLACE PROCEDURE get_employees(p_country_id IN CHAR
, p_emp OUT SYS_REFCURSOR)
IS
BEGIN
OPEN p_emp FOR
SELECT e.first_name
,e.last_name
,e.department_id
,d.department_name
,l.city
,l.state_province
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id
INNER JOIN locations l
ON d.location_id = l.location_id
WHERE l.country_id = p_country_id;
END;
我知道如何在SQL開發GUI界面執行它,並查看結果。我也從Justin Cave處瞭解到here和here如何執行它並查看結果SQL * Plus的風格像這樣:
VARIABLE CE REFCURSOR;
EXEC GET_EMPLOYEES('US', :CE);
PRINT CE;
我想在一個匿名PL/SQL塊執行存儲過程和看在網格中的結果,但它並沒有成功。
像什麼賈斯汀洞的建議,下面執行得很好,但結果不顯示:
DECLARE
C_EMP SYS_REFCURSOR;
BEGIN
GET_EMPLOYEES('US', C_EMP);
END;
下會失敗:
DECLARE
C_EMP SYS_REFCURSOR;
L_REC C_EMP%ROWTYPE; --THIS LINE FAILS.
BEGIN
GET_EMPLOYEES('US', C_EMP);
-- LOOP AND FETCH GOES HERE.
END;
錯誤消息說:
PLS-00320:此表達式類型的聲明是 不完整或格式不正確
我不明白。我一直在其他一些匿名的PL/SQL塊中這樣做,並且它工作得很好。這條線有什麼問題?無法弄清楚。
引用遊標與普通遊標不相同;你在其他方塊中做了什麼 - 使用普通光標的rowtpe? [你不能這樣做](http://stackoverflow.com/q/11187376/266304),但我不知道如何做到這一點無論如何會幫助你。我不完全確定你的問題是什麼 - 爲什麼你會得到這個錯誤,或者你在尋找如何在網格視圖中獲取引用光標?或者是其他東西? –
[This answer](http://stackoverflow.com/a/27006514/266304)還顯示了一種通過代碼編輯器對話框在網格中獲取結果的方法。這可能是這些問題之一的重複,但不確定哪一個。 –
@AlexPoole:我想我已經明確了我一直在試圖做的事情:'我想在一個匿名的PL/SQL塊中執行存儲過程,並在網格中查看結果,但它並未成功。' – Stack0verflow