CURSOR式
CURSOR
式は、ネストしたカーソルを戻します。
構文は次のとおりです。
CURSOR ( subquery )
CURSOR
式は、副問合せではないSELECT
文で使用するか(例7-35のように)、カーソル変数パラメータを受け入れるファンクションに渡すことができます(「パイプライン・テーブル・ファンクションへのCURSOR式の引渡し」を参照)。カーソル式は、暗黙カーソルとは併用できません。
関連項目:
制限などのCURSOR
式の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例7-35 CURSOR式
この例では、カーソル式を含む問合せで明示カーソルを宣言および定義しています。departments
表の部門ごとに、ネストしたカーソルはその部門の各従業員の名前を戻します(employees
表から取得します)。
DECLARE TYPE emp_cur_typ IS REF CURSOR; emp_cur emp_cur_typ; dept_name departments.department_name%TYPE; emp_name employees.last_name%TYPE; CURSOR c1 IS SELECT department_name, CURSOR ( SELECT e.last_name FROM employees e WHERE e.department_id = d.department_id ORDER BY e.last_name ) employees FROM departments d WHERE department_name LIKE 'A%' ORDER BY department_name; BEGIN OPEN c1; LOOP -- Process each row of query result set FETCH c1 INTO dept_name, emp_cur; EXIT WHEN c1%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Department: ' || dept_name); LOOP -- Process each row of subquery result set FETCH emp_cur INTO emp_name; EXIT WHEN emp_cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE('-- Employee: ' || emp_name); END LOOP; END LOOP; CLOSE c1; END; /
結果:
Department: Accounting -- Employee: Gietz -- Employee: Higgins Department: Administration -- Employee: Whalen