客戶編號分配中,PL/SQL型別自動轉換問題

regonly1發表於2012-01-10
plsql中,case when語句和decode存在類似的型別隱式轉換處理。
對映的值會根據第一個值的型別進行隱式轉換,也就是說,如果第一個值是數值型,
則後續也會轉換成數值型。因此,如果後面某個值是非數字值則會出現轉型錯誤。比如下面的情況:
declare
    v_retval varchar2(100);
    p_content varchar2(100) := '軍12312422';
    p_dcval   varchar2(100) := '-';
begin
    v_retval := case length(p_content)
                when 15 then mod(substr(p_content, 15, 1), 2)
                when 18 then mod(substr(p_content, 17, 1), 2)
                else p_dcval
                end;
end;
會出現下面錯誤:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 9
因為前面兩個做了mod處理後,系統預設為是數值型值了。但是遇到p_dcval發現是'-',是非數字型
無法轉換,因此報錯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-714653/,如需轉載,請註明出處,否則將追究法律責任。

相關文章