Ora-01722について
文字列型(varchar,charなど)をto_numberを使って数値に変換する際、
「数値以外の文字が入ってるからnumber型に変換できません」っていうエラー
シチュエーション
文字列型の列col1を持つtblAというテーブルに、以下のようなUpdate文を流したい。
UPDATE tblA
SET col1 = to_char( ( to_number( col1 ) +1 )
col1は数字だけの文字列が期待されているが、なにかの誤操作で数値以外の文字列が入っており、ora-01722が発生した。
テーブル全体に対してUpdateをかけているのでエラー該当行がパッと分からない。
どの行でora-01722が発生しているか特定したい。
役に立ったSQL
SELECT * FROM tblA
WHERE (REGEXP_LIKE(COL1, '[^0-9]'))
解説
REGEXP_LIKE(COL,'regex')
COLに正規表現'regex'が部分マッチするかどうか
[^0-9]
'^'は正規表現で否定を表す。つまり[^0-9]は数値以外の文字をあらわす。
つまり?
正規表現で「数値以外の文字がcol1に含まれている」行をselectしている。
参考(というか引用)