2014年11月20日 星期四

【Oracle】PL/SQL 判斷是否為數字 (Is Numeric)

辛辛苦苦寫了運算式,結果,才發現使用者寫入的資料居然有非數值時,真的會讓人昏倒。




使用Translate() 符合條件會回傳null:
ex :
    LENGTH(TRIM(TRANSLATE('123b', ' +-.0123456789',' ')));     return 1
    LENGTH(TRIM(TRANSLATE('a123b', ' +-.0123456789',' ')));     return 2
    LENGTH(TRIM(TRANSLATE('1256.54', ' +-.0123456789',' ')));     return null
    LENGTH(TRIM(TRANSLATE ('-56', ' +-.0123456789',' ')));     return null

或是自行建立一個 isNumeric() : 
CREATE OR REPLACE FUNCTION isNumeric (str IN VARCHAR2)
    RETURN NUMBER
IS
    v_str VARCHAR2 (1000);
BEGIN
    IF str IS NULL
    THEN
       RETURN 0;
    ELSE
       v_str := TRANSLATE (str, '.0123456789', '.');

       IF v_str = '.' OR v_str = '+.' OR v_str = '-.' OR v_str IS NULL
       THEN
          RETURN 1;
       ELSE
          RETURN 0;
       END IF;
    END IF;
END isnumeric;

參考來源:[Oracle] PL/SQL 判斷是否為數字 (Is Numberic)

沒有留言:

張貼留言