0

次のサブクエリがあるクエリがあります

(select account from asl_data where alias_accunt = trim(field) )

ここで、alias_account は varchar2(20) ですが、フィールド値は別のサブクエリの substr から取得されます。ただし、値は 00123456789 になります

このため、無効な番号としてエラーが発生しています。私はto_charを試し、両方のフィールドに関数をキャストしました。しかし、何も機能していないようです。

何か不足していますか?これに関する提案はありますか?

ありがとうございました!!

4

1 に答える 1

1

このクエリ/手順のどこかで、暗黙的に文字列を数値に変換しようとしています。おそらくサブクエリで、またはおそらく変数宣言が変数の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
于 2012-10-05T16:23:37.363 に答える