2009-11-13 110 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