直前に実行したSQL(DML)の処理対象が存在するかどうかを取得するには、
SQL%FOUND、SQL%NOTFOUND を使用します。
サンプル
例)直前に実行したUPDATE文の処理対象があるかどうか判定する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
CREATE OR REPLACE PROCEDURE SQLFOUNDSAMPLE IS BEGIN --処理実行 UPDATE MST_USER SET FLG = 1 WHERE USER_ID = '1001'; --判定 IF SQL%FOUND THEN DBMS_OUTPUT.PUT_LINE('処理対象が存在します。'); COMMIT; ELSE DBMS_OUTPUT.PUT_LINE('処理対象が存在しません。'); ROLLBACK; END IF; END SAMPLE01; / |
SQL%FOUND は処理対象が存在する場合にTRUEを返します。
サンプル
例)直前に実行したUPDATE文の処理対象が無いかどうか判定する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
CREATE OR REPLACE PROCEDURE SQLNOTFOUNDSAMPLE IS BEGIN --処理実行 UPDATE MST_USER SET FLG = 1 WHERE USER_ID = '1001'; --判定 IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('処理対象が存在しません。'); ROLLBACK; ELSE DBMS_OUTPUT.PUT_LINE('処理対象が存在します。'); COMMIT; END IF; END SAMPLE02; / |
SQL%FOUND は処理対象が存在しない場合にTRUEを返します。
備考
- SQL文(SELECT)だけでなく、DML文(UPDATE、INSERT、DELETE)でも使用できます。