LoginSignup
8
4

More than 5 years have passed since last update.

「Ora-01722 数値が無効です」が出たときに使えたSQL

Posted at

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している。

参考(というか引用)

8
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4