①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
)
/