[PL/SQL]レコードを一括でupdateする

SQL

レコードを一括で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;
/

レコード数が多い場合

レコード数が多い場合はバルクフェッチを使います。

コメント

タイトルとURLをコピーしました