レコードを一括でupdateする
テーブルのレコード数が数万程度なら単純なupdate文でOKです。
例)
HOGE_TABLE テーブルの HOGE_CD カラムをすべて 「CD99」に更新する。
SET SERVEROUTPUT ON;
DECLARE
v_update_count NUMBER(10) :=0;
BEGIN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') || '[START] UPDATE SQL');
UPDATE HOGE_TABLE
SET
HOGE_CD = 'CD99';
v_update_count := v_update_count + SQL%ROWCOUNT;
COMMIT;
DBMS_OUTPUT.PUTLINE(TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') || '[END] TOTAL UPDATE:' || v_update_count || 'record');
DBMS_OUTPUT.PUTLINE(TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') || '[END] UPDATE SQL');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUTLINE(TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') || '[ERROR] ERRORCODE:' || SQLCODE);
DBMS_OUTPUT.PUTLINE(TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') || '[ERROR] ERRORMSG:' || SQLERRM);
DBMS_OUTPUT.PUTLINE(TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') || '[END] TOTAL UPDATE:' || v_update_count || 'record');
ROLLBACK;
-- エラー発生を明示的に返却する
RAISE;
END;
/
レコード数が多い場合
レコード数が多い場合はバルクフェッチを使います。
コメント