前提・実現したいこと
いつも参考にさせていただいています。
現在、既存のテーブル(例としてUSERテーブル)に登録されているデータを
SELECT文で取得し、INSERT文として出力しようとしています。
VARCHAR2型の項目のデータがNULLの場合は、NVLを利用することで出力される
INSERT文の該当箇所に「NULL」と出力することができているのですが、
NUMBER型の場合にNVLで「NULL」を出力しようとするとエラーが発生し、処理がうまく動きません。
どのようにすればNUMBER型項目のところにNULLを出力することができるのでしょうか。
現在作業している環境ではツール類の導入が禁止されているため、利用できるのはSQL*Plusとメモ帳のみです。
SQLDeveloperなどのツールを使用してINSERT文をエクスポート出力すればNUMBER型の項目にもNULLと出力されているので、SQLでも同様のことがしたいと考えています。
ご教授のほど、よろしくお願いいたします。
発生している問題・エラーメッセージ
ORA-01722: 数値が無効です。
該当のソースコード
sql
1select 2'INSERT INTO USER VALUES(' 3 || NVL(COMPANYID, 'NULL') || ',' 4 || NVL(USERID, 'NULL') || ',' 5 || NVL(AGE, 'NULL') || ',' /* ここの「NULL」でエラーが発生 */ 6 || 'SYSDATE' || ',' 7 || ');' 8from USER
試したこと
〇NUMBER型項目のNVLの第2引数を「NULL(シングルクォートなし)」に変更
sql
1select 2'INSERT INTO USER VALUES(' 3 || NVL(COMPANYID, 'NULL') || ',' 4 || NVL(USERID, 'NULL') || ',' 5 || NVL(AGE, NULL) || ',' /* 'NULL' → NULL に変更 */ 6 || 'SYSDATE' || ',' 7 || ');' 8from USER
結果:INSERT文は取得できるが、「AGE」の部分に何も出力されないため、このままではSQL実行時にエラーとなる。
sql
1INSERT INTO USER VALUES('1','0000001',,SYSDATE);
補足情報(FW/ツールのバージョンなど)
Windows 10 EnterPrise
Oracle Database 19c
回答1件
あなたの回答
tips
プレビュー