Oracle XE の HR データベースを使用して PL/SQL を学習しています。
次のストアド プロシージャを作成しました。
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 Developer GUIインターフェイスで実行して結果を確認する方法を知っています。また、 Justin Caveからこことここでそれを実行し、SQL*Plus スタイルの結果を次のように確認する方法も学びました。
VARIABLE CE REFCURSOR;
EXEC GET_EMPLOYEES('US', :CE);
PRINT CE;
匿名の PL/SQL ブロックでストアド プロシージャを実行し、グリッドで結果を確認したいのですが、うまくいきませんでした。
Justin Cave が提案したように、以下は問題なく実行されますが、結果は表示されません。
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ブロックでそれを行ってきましたが、完全に機能しました。ここの行の何が問題になっていますか? わかりません。