テーブルのNotNull制約とデフォルト値に変更があった場合 | ..:: 仕事メモ ::..

..:: 仕事メモ ::..

プログラミングメモφ(◎。◎‐)フムフムフム

すぐ忘れるのでしょーもないことでもメモします。

内容には環境に依存したものもあるので情報には一切の責任を持ちません・・・



最近は仕事メモすることが少なくなってきたので、日記をマメにメモします

①Nullデータ調査.sql
 文字型でNotNull制約は付けるが、デフォルト設定しない項目について
 現状データのNullを調査する。ここで、Nullがあったら、手作業で
 データを修正する。

set serveroutput on

declare
  msg varchar2(500) := null;
  cnt number := 0;

procedure result(
  cnt number,
  tbl varchar2,
  col varchar2
 ) is

begin
  dbms_output.put_line(tbl || '.' || col || ' = ' || to_char(cnt) || ' 件');
end;
begin
  /* HOGE情報 */

  select count(*) into cnt from HOGE_TBL where HOGE_CD is null;

  result(cnt,'HOGE_TBL','HOGE_CD');


  /* HOGEHOGE情報 */
  select count(*) into cnt from HOGEHOGE_TBL where HOGEHOGE_CD is null;

  result(cnt,'HOGEHOGE_TBL','HOGEHOGE_CD');

exception
  when others then
    msg := SQLERRM;

    dbms_output.put_line('ERROR:' || msg);
end;
/


②update.sql
 デフォルトの決まっている項目について、Nullをデフォルト値へ
 更新する。

update HOGE_TBL set
  HOGE_CD = nvl(HOGE_CD,'hoge')

  ,UD_DATE = nvl(UD_DATE, to_char(SYSDATE,'YYYYMMDDHH24MISS'))

  ,UD_USERID = nvl(UD_USERID,'SYSTEM')
/


③alter.sql
 NotNull制約とデフォルト値のDDL定義を変更する。
ALTER TABLE HOGE_TBL MODIFY
(

  HOGE_CD NOT NULL

  ,HOGE1 DEFAULT 0 NOT NULL

  ,HOGE2 DEFAULT 0 NOT NULL

  ,HOGE3 DEFAULT 0 NOT NULL

  ,HOGE4 DEFAULT 0 NOT NULL

  ,UD_DATE NOT NULL

  ,UD_USERID NOT NULL
)
/