Сложность внедрения REGEXP_SUBSTR - PullRequest
0 голосов
/ 13 ноября 2009

Я выполняю SQL-запросы в Oracle 10g. У меня есть две таблицы (пример данных приведен ниже). я пытаюсь извлечь некоторые поля из таблицы t2 и обновите пустые столбцы в таблице t1. Я сталкиваюсь со следующей ошибкой:

ORA 01722: недействительный номер (указывает на REGEXP_SUBSTR )

Я понимаю, что это из-за нечисловых данных (например, "НЕТ кода {...}") в моей таблице, которые я пытаюсь извлечь, используя выражение 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

Спасибо

Новичок

1 Ответ

0 голосов
/ 13 ноября 2009

Вы можете использовать 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
...