oracleはもう一つの保存中に別のリターンラベルの格納プロセスを呼び出します。


第1の場合は、SQL-Code:
 
CREATE OR REPLACE PROCEDURE P_TESTA (
PRESULT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN PRESULT FOR SELECT * FROM USERS;
END P_TESTA;
のように、戻りの遊覧标は特定のテーブルまたはビューのデータである。ここで、USERSはデータベースのテーブルである。呼び出し時に、このテーブルのROWTYPEタイプを宣言すればいいです。SQL-Code:
 
CREATE OR REPLACE PROCEDURE P_TESTB
AS
VARCURSOR SYS_REFCURSOR;
R USERS%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCH VARCURSOR INTO R;
EXIT WHEN VARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.NAME);
END LOOP;
END P_TESTB;
の第二の場合、私たちは表のすべての列ではなく、SQL-Code:
 
CREATE OR REPLACE PROCEDURE P_TESTA (
PRESULT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN PRESULT FOR SELECT ID,NAME FROM USERS;
END P_TESTA;
のような一列または二列だけを返します。ここではUSERSテーブルのID、NAMEの二つの列だけを返します。呼び出し時にも、対応する変更が必要です。SQL-Code:
 
CREATE OR REPLACE PROCEDURE P_TESTB
AS
VARCURSOR SYS_REFCURSOR;
CURSOR TMPCURSOR IS SELECT ID,NAME FROM USERS WHERE ROWNUM=1;
R TMPCURSOR%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCH VARCURSOR INTO R;
EXIT WHEN VARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.ID);
END LOOP;
END P_TESTB;
は、以前とは違って、私たちは、遊んでいるタイプの変数TMPCURSORを宣言しました。TESTAが戻ってきたランドマークの構造が一致していないとエラーが発生します。同じ理屈では、2つのラベルタイプの構造が一致していれば、自由呼び出しが可能です。