ここではORACLE社が提供するPL/SQL言語でINSERT,UPDATE,DELETEの処理件数を取得する方法を紹介しています。
INSERT,UPDATE,DELETE件数の取得方法
PL/SQL言語でINSERT,UPDATE,DELETEを実行すると、内部的にカーソル処理(暗黙カーソル)に変換されて実行されています。
このとき処理件数はROWCOUNTという属性に格納されるので、これを取得します。
INSERTの処理件数の取得
INSERT文の処理結果は「SQL%ROWCOUNT」で取得できます。
BEGIN
INSERT INTO tab1 VALUES('00001','Suzuki','D0001',28);
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
COMMIT;
END;
1
PL/SQLが実行されました(6 msec.)
「SQL%ROWCOUNT」には直前のSQLの処理結果が格納されるため、INSERT文を3行並べて書いた場合は、1という結果が返ってきます。
BEGIN
INSERT INTO tab1 VALUES('00001','Suzuki','D0001',28);
INSERT INTO tab1 VALUES('00002','Tanaka','D0002',25);
INSERT INTO tab1 VALUES('00003','Kizaki','D0002',35);
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
COMMIT;
END;
1
PL/SQLが実行されました(21 msec.)
複数行のINSERT文はINSERT ALLを使うことで1文にすれば、処理件数を取得することが出来ます。
INSERT文の詳しい書き方は↓で紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり
BEGIN
INSERT ALL
INTO tab1 VALUES('00001','Suzuki','D0001',28)
INTO tab1 VALUES('00002','Tanaka','D0002',25)
INTO tab1 VALUES('00003','Kizaki','D0002',35)
SELECT * FROM dual;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
COMMIT;
END;
3
PL/SQLが実行されました(6 msec.)
UPDATEの処理件数の取得
UPDATE文の処理結果は「SQL%ROWCOUNT」で取得できます。
BEGIN
UPDATE tab1 SET age = 99;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
COMMIT;
END;
3
PL/SQLが実行されました(21 msec.)
DELETEの処理件数の取得
DELETE文の処理結果は「SQL%ROWCOUNT」で取得できます。
BEGIN
DELETE FROM tab1;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
COMMIT;
END;
3
PL/SQLが実行されました(22 msec.)
0件エラーの実装
「SQL%ROWCOUNT」を使うことで、SQLの処理結果が0件の場合のエラー処理などを実装することもできます。
次の例では、UPDATE文の結果が0件の場合にエラーメッセージを表示しています。
BEGIN
UPDATE tab1 SET age = 99 WHERE 0 = 1;
IF SQL%ROWCOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
END IF;
COMMIT;
END;
ERROR
PL/SQLが実行されました(53 msec.)
注意点:COMMIT後は取得できない
「SQL%ROWCOUNT」には直前で実行されたSQLの処理結果がで取得できます。
次の例のようにコミットした後はクリアされ0となるので注意が必要です。
BEGIN
INSERT INTO tab1 VALUES('00001','Suzuki','D0001',28);
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
COMMIT;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;
1
0
PL/SQLが実行されました(6 msec.)