INSERT INTO TBL1 (
COL11
,COL12
)
SELECT
COL21
,CASE WHEN TRIM(COL22) IS NULL THEN DEFAULT ELSE COL22 END
FROM
TBL2
Oracle にて、こういうことをしたいが無理っぽい。(意味は通じるよね?)
仕方ないのでカーソルまわして、ゴリゴリ文字列連結して一件ずつ execute immediate とかやってる。
INSERT 時に対象の列だけ省いて INSERT し、あとで UPDATE で CASE すればいけるか??と思ったが、10数個の列のうち主キー指定されているのが10個ほどで、空ならデフォルトにしたい行も主キーに含まれている。
どんなテーブル設計だ!と突っ込みたいが、上から降ってきたものだから仕方がない。
SYS.COL ビューからデフォルト値を取ってくるか!と思ったが、LONG 型を CHAR 型に変換できなくて断念。
どうにか方法はないものか