2015-12-21 29 views
0

我想大規模更新Paytotaxid。我現在用的是Case聲明..的如下圖所示如何擺脫錯誤「缺少表達」,而使用UPDATE CASE

UPDATE Persons 
    SET Paytotaxid = CASE Paytotaxid 
         WHEN = '' 
         THEN '' 
         ELSE 'XXXX' || RIGHT(TaxID,4) 
        END; 

但我不斷收到錯誤缺少表達式

現狀

PERSONID LASTNAME FIRSTNAME ADDRESS CITY PAYTOTAXID TAXID 

11 Tom B. Erichsen Skagen 21 Stavanger Norway 123-57-2988 123-57-2988 

22 Joe B. Erichsen Skagen 21 Stavanger minneapolis 123-57-3338 123-57-3338 

33 Mary B. Erichsen Skagen 21 Stavanger Norway 123-57-4444 123-57-4444 

44 Jaya B. Erichsen Skagen 21 Stavanger Norway 

預期結果

PERSONID LASTNAME FIRSTNAME ADDRESS CITY PAYTOTAXID TAXID 

11 Tom B. Erichsen Skagen 21 Stavanger Norway XXXXX2988 123-57-2988 

22 Joe B. Erichsen Skagen 21 Stavanger minneapolis XXXXX3338 123-57-3338 

33 Mary B. Erichsen Skagen 21 Stavanger Norway XXXXX4444 123-57-4444 

44 Jaya B. Erichsen Skagen 21 Stavanger Norway 
+0

取出'='後 – DBug

+0

我得到一個錯誤說 - ORA-00904:「RIGHT」:無效的標識符。是「正確」在oracle中無效? – user5704279

+0

不,在Oracle(11gR2)中,Right不是有效的函數。你將不得不使用'SUBSTR(TaxId,LENGTH(TaxID)-4)' – DBug

回答

0

除了在錯誤的地方=標誌,你試圖做一個平等的檢查與空字符串,在Oracle中不起作用,因爲空字符串被解釋爲NULL,並且需要使用IS NULL或0來檢查空值。

但在這種情況下,您似乎只想更新字段,如果它不爲空。在這種情況下,根本不需要case。您只需要使用正常的where子句過濾掉不想更新的行。

update persons 
    set Paytotaxid = 'XXXX' || SUBSTR(TaxID,-4) 
where Paytotaxid is not null 

EDIT:依照意見,取代了RIGHT功能,這是Oracle無效。

+0

我收到一個錯誤 - ORA-00904:「RIGHT」:無效的標識符。 – user5704279

+0

我假設他從你的例子中複製了RIGHT(),假設它是你的函數。如果你想要一個字符串的最右邊的四個字符使用SUBSTR(TaxId,-4) –

+0

@Michael:謝謝。我沒有發現。這是SQL遇到很多小問題時的問題。 – sstan