このクエリ/手順のどこかで、暗黙的に文字列を数値に変換しようとしています。おそらくサブクエリで、またはおそらく変数宣言が変数の1つの数値であるためです。ただし、投稿した例には何も問題はないようです。
フィールドを特定したら、次のようなクエリを使用して、この問題の原因となっている行を確認できます。
with t1 as
(
select '100' id1, 'first' name1 from dual
union all
select '100A' id1, 'second' name1 from dual
union all
select '$$1' id1, 'third' name1 from dual
)
select * from t1
100 first
100A second
$$1 third
id を数値に変換しようとすると、最初のものは機能しますが (あなたの例がそのような場合である可能性があります)、他のものはエラーを発生させます。
with t1 as
(
select '100' id1, 'first' name1 from dual
union all
select '100A' id1, 'second' name1 from dual
union all
select '$$1' id1, 'third' name1 from dual
)
select id1,
name1,
to_number(id1)
from t1
/
ERROR:
ORA-01722: invalid number
この問題がある行を特定するには、次を使用します...
with t1 as
(
select '100' id1, 'first' name1 from dual
union all
select '100A' id1, 'second' name1 from dual
union all
select '$$1' id1, 'third' name1 from dual
)
select id1,
name1
--,replace( translate( id1, '0123456789', '0000000000' ), '0', '' ),
--length(replace( translate( id1, '0123456789', '0000000000' ), '0', '' ))
from t1
where length(replace( translate( id1, '0123456789', '0000000000' ), '0', '' )
) <> 0
id1 name1
---------------
100A second
$$1 second