难以实施REGEXP_SUBSTR

时间:2009-11-13 04:45:17

标签: sql oracle10g ora-01722

我在Oracle 10g上运行SQL查询。我有两张桌子(下面提供的样本数据)。我正在尝试提取一些字段 从表t2开始,更新表t1中的空列。我遇到以下错误:

ORA 01722:无效号码(指向 REGEXP_SUBSTR

我理解这是因为我的表中的非数字数据(如“NO code {...}”),我正在尝试使用REGEXP_SUBSTR * Expression提取 我想知道是否有人可以建议我一些替代实现来帮助我“复制整个字符串”而不是抛出异常。

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 :(得分: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