三流備忘録OracleのSQL PL/SQL 関数 ついての備忘録
カーソルの基本
カーソル属性
| カーソル属性 | 内容 |
| カーソル名%NOTFOUND; | フェッチ行がなければTRUE |
| カーソル名%FOUND; | フェッチ行があればTRUE |
| カーソル名%ROWCOUNT; | フェッチされた行数 |
| カーソル名%ISOPEN; | オープンしていればTRUE |
カーソル例
DECRARE
/*****************************************************************
CURSOR カーソル名 IS SELECT 文;
/*****************************************************************
CURSOR CSR1 IS
SELECT hoge_id,hoge_seq,hoge_name
FROM T_HOGE
WHERE hoge_id BETWEEN 1 AND 10;
CSR1_REC CSR1%ROWTYPE;--レコード変数宣言
BIGIN
/*****************************************************************
OPEN カーソル名;
/*****************************************************************
OPEN CSR1;
LOOP
/*****************************************************************
FETCH カーソル名 INTO レコード;
/*****************************************************************
FETCH CSR1 INTO CSR1_REC;
EXIT WHEN CSR1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('hoge_id=' || CSR1.hoge_id);
DBMS_OUTPUT.PUT_LINE('hoge_seq=' || CSR1.hoge_seq);
DBMS_OUTPUT.PUT_LINE('hoge_name=' || CSR1.hoge_name);
END LOOP;
/*****************************************************************
CLOSE カーソル名;
/*****************************************************************
CLOSE CSR1;
END;
カーソル例(FOR..IN)
DECRARE
/*****************************************************************
CURSOR カーソル名 IS SELECT 文;
/*****************************************************************
CURSOR CSR1 IS
SELECT hoge_id,hoge_seq,hoge_name
FROM T_HOGE
WHERE hoge_id BETWEEN 1 AND 10;
BIGIN
/*****************************************************************
・カーソルのOPEN,FETCH,EXIIT,CLOSEを簡易かした方法
・レコード変数を事前に宣言する必要がない
・CSR1の部分にSELECT文を書ける。
/*****************************************************************
FOR CSR1_REC IN CSR1 LOOP
DBMS_OUTPUT.PUT_LINE('hoge_id=' || CSR1.hoge_id);
DBMS_OUTPUT.PUT_LINE('hoge_seq=' || CSR1.hoge_seq);
DBMS_OUTPUT.PUT_LINE('hoge_name=' || CSR1.hoge_name);
END LOOP;
END;
カーソル例(パラメータ付)
DECRARE
/*****************************************************************
CURSOR カーソル名 IS SELECT 文;
/*****************************************************************
CURSOR CSR1(KEY1 NUMBER,KEY2 NUMBER) IS
SELECT hoge_id,hoge_seq,hoge_name
FROM T_HOGE
WHERE hoge_id BETWEEN KEY1 AND KEY2;
BIGIN
/*****************************************************************
・パラメータを指定
/*****************************************************************
FOR CSR1_REC IN CSR1( 1 , 5) LOOP
DBMS_OUTPUT.PUT_LINE('hoge_id=' || CSR1.hoge_id);
DBMS_OUTPUT.PUT_LINE('hoge_seq=' || CSR1.hoge_seq);
DBMS_OUTPUT.PUT_LINE('hoge_name=' || CSR1.hoge_name);
END LOOP;
END;