0

Oracle 10g で SQL クエリを実行しています。2 つのテーブルがあります (サンプル データを以下に示します)。テーブル t2 からいくつかのフィールドを抽出し、テーブル t1 の空の列を更新しようとしています。次のエラーが発生します。

ORA 01722: 番号が無効です( REGEXP_SUBSTRを指しています)

これは、テーブル内の非数値データ (" NO code {...} " など) が原因であることを理解しており、REGEXP_SUBSTR* 式を使用して抽出しようとしています。例外をスローする代わりに、「文字列全体をコピー」してください。

MERGE
INTO    temptab t1
USING   directory_list t2
ON      (REGEXP_SUBSTR(codelist, '[^.]+', 1) = t2.tcode)
WHEN MATCHED THEN
UPDATE
SET    t1.tcode = t2.tcode,
       t1.des   = t2.des

temptab t1

Codelist          | T1.tcode   | T1.des
1111.1.803.12.X.Z 
1000.2.3232.145.M.P        
300.12.2982.45.X.Y         
NO code {...}  
1111.1.803.12.X.Z

directory_list t2
    tcode              |   DES
    1000           | powervalue100
    300                | powermax300
    20                 | powermin20
    NO code {...}      | maxvalue plus
    1000           | powervalue100

ありがとう、

初心者

4

1 に答える 1

0

「。」がない場合は、CASE を使用して検出できます。コードリストで。

MERGE
INTO    temptab t1
USING   directory_list t2
ON      (CASE WHEN INSTR(codelist,'.') = 0 THEN codelist
              ELSE REGEXP_SUBSTR(codelist, '[^.]+', 1)
         END = t2.tcode)
WHEN MATCHED THEN
UPDATE
SET    t1.tcode = t2.tcode,
       t1.des   = t2.des
于 2009-11-13T10:04:28.540 に答える