2012-11-02 14 views
1

如何檢查varchar是一個數字還是包含Oracle表單中的任何特殊字符。檢查一個varchar是否是Oracle表格中的一個數字

我嘗試使用下面的代碼,但它給我的邏輯錯誤

declare 
    v_valid varchar2(15); 
begin 
    v_valid := :HEADERS.REFERENCE ; 
If NOT v_valid IN ('0','1','2','3','4','5','6','7','8','9') then 
     message('Characters or Special Symbols are not allowed here'); 
end if; 
end; 
+0

你得到的錯誤是什麼? – greatmajestics

+0

http://stackoverflow.com/questions/1154612/oracle-varchar-to-number有一個職位。 – greatmajestics

回答

-1

我能解決這個問題。這裏是代碼

declare 
    v_valid varchar2(15); 
begin 
    v_valid := :HEADERS.REFERENCE ; 
If v_valid NOT Between '0' AND '9' then 
     message('Characters or Special Symbols are not allowed here'); 
end if; 
end; 
+3

你會遇到很多問題。請注意,'2A'在'0'和'9'之間落入 – Roger

+1

只有在字符串中只有一位數字時,這才能正常工作。最好的方法是嘗試將其轉換爲數字並捕獲錯誤。 – DJPeter

+0

根據之前的評論,這是一個完全不可接受的解決方案,請標記Roger的答案是否正確。 – Reimius

4

嘗試將其轉換爲數字並捕獲異常。

vVarchar varchar2(15) := '15'; 
    nNumber number; 
    BEGIN 
     nNumber := to_number(vVarchar);   
     message('Success!!'); 
    EXCEPTION WHEN VALUE_ERROR THEN 
     message('Characters or Special Symbols are not allowed here'); 
    END; 

這實際上你用 If v_valid NOT Between '0' AND '9' then做什麼 是你會得到很多的問題,輸入這樣的:'2aas', '9&%$'

考慮的對象的屬性改變:HEADERS.REFERENCE到數字,應該更容易。

+0

這是(幾乎)我應該這樣做的方式,但我不建議您使用WHEN OTHERS。而是使用當您嘗試將數字轉換爲字符串時得到的oracle異常的編號。如果我記得正確的話,這應該是6502。 – DJPeter

+0

@PeterÅkerlund相應地編輯,讓我知道如果這是正確的,或者我應該把'6502'除外?我不知道如何在這裏使用oracle代碼,我一直使用這個詞。 – Roger

+0

您可以用數字替換VALUE_ERROR,但我沒有看到任何需要。你的方法是更好的編碼實踐。 – DJPeter

相關問題