2009-11-13 59 views
0

我在Oracle 10g上运行SQL查询。我有两个表格(下面提供了示例数据)。我试图从表t2中提取一些字段 并更新表t1中的空列。我遇到了以下错误:难以实现REGEXP_SUBSTR

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 

感谢,

新手

回答

0

你可以使用CASE来检测有当没有 “”在codelist中。

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