SQL*Plusでは、PL/SQLブロックまたはストアド・プロシージャに含まれるSELECT文の結果を反復的にフェッチし、その書式を設定できます。ローカルのREFCURSOR変数を定義する必要はありません。
SELECT文の結果が表示されます。
ResultSet #1
DEPTNO DNAME LOC ------ ---------- --------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 4 rows selected
ResultSet #2
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ---- --------- ---- ---- -- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 05-APR-11 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 09-MAY-11 1100 14 rows selected
例5-17 PL/SQLプロシージャの作成
2つの文をコールするPL/SQLプロシージャP4を作成します。
create procedure p4 as c1 sys_refcursor; c2 sys_refcursor; begin open c1 for SELECT * FROM DEBT; dbms_sql.return_result(c1); open c2 for SELECT * FROM EMP; dbms_sql.return_result(c2); end; / Procedure created.
次に、このプロシージャを実行して、プロシージャ内のSELECT文の結果を反復的に取得します。
exec p4 PL/SQL procedure successfully completed.