2013-10-24 38 views
2

我對SQL Server的T-SQL很有經驗,但最近開始使用Oracle數據庫(11g)開展一個項目,並且遇到了一些問題似乎是基本的代碼。簡單的PL/SQL函數來測試一個字符串是否是一個數字

我需要測試一組值是否爲數值,並且只有將它們插入到表中才可以。 PL/SQL似乎沒有is_number函數,所以我根據AskTom問題編寫了自己的函數。

create or replace 
function   IS_NUMBER(str in varchar2) return boolean 
IS 
    n number; 
BEGIN 
    select to_number(str) into n from dual; 
    return (true); 
EXCEPTION WHEN OTHERS THEN 
    return (false); 
END; 

最後,我想在WHERE子句中使用該功能,但現在我只是想獲得它在所有運行:

declare 
    str varchar2(1); 
    n boolean; 
begin 
    str := '0'; 
    select ca_stage.is_number(str) into n from dual; 
end; 

在SQL Developer中,試圖運行這給我以下錯誤報告:

Error report: 
ORA-06550: line 6, column 39: 
PLS-00382: expression is of wrong type 
ORA-06550: line 6, column 19: 
PLS-00382: expression is of wrong type 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

錯誤報告是直截了當,但沒有意義。該函數接受一個varchar2,這就是我用作輸入變量的東西。它返回一個布爾值,然後,這就是我正在使用的。

正如我所說,這是基本代碼,所以我假設我錯過了一些基本的東西。

+0

布爾表達式不能在SQL中使用。 –

+0

你是對的。你可以輸入這個答案嗎? – virtuesplea

+0

可能的重複[檢查它是否是Oracle中的一個數字函數](http://stackoverflow.com/questions/5082176/check-if-its-a-number-function-in-oracle) – 2014-10-06 21:10:41

回答

3

返回SQL數據類型,例如VARCHAR2。另外,我建議不要使用WHEN OTHERS。此外,您不需要雙重查詢:

create or replace 
function IS_NUMBER(str in varchar2) return varchar2 
IS 
    n number; 
BEGIN 
    n := to_number(str); 
    return 'Y'; 
EXCEPTION WHEN VALUE_ERROR THEN 
    return 'N'; 
END; 
相關問題