Oracle 数字类型校验

只允许允许录入 -、0-9、.等字符

CREATE OR REPLACE FUNCTION IS_NUMBER(IN_DATA IN VARCHAR2--原始数据
                                     I       IN NUMBER--整数位数最大允许值
                                     J       IN NUMBER --小数位数最大允许值 0-不能有小数位 ,-1 不校验小数长度
                                     ) RETURN INTEGER AS
  V_NUMBER  NUMBER;
  V_XIAOSHU VARCHAR2(128);
  --数据类型校验 返回1 :正确 返回0: 错误
BEGIN
  IF (INSTR(IN_DATA, ','11<> 0THEN
    RETURN 0;
  END IF;
  IF J = -1 THEN
    V_XIAOSHU := '9999999999999999999999999999';
  ELSIF J = 0 THEN
    V_XIAOSHU := '0';
  ELSE
    V_XIAOSHU := TRIM(LPAD(' ', J + 1'9'));
  END IF;
  V_NUMBER := TO_NUMBER(IN_DATA,
                        TRIM(LPAD(' ', I + 1'9')) || '.' || V_XIAOSHU);  --利用类型转换异常判断是否合法
  RETURN 1;
EXCEPTION
  WHEN OTHERS THEN
    RETURN 0;
END IS_NUMBER;
posted @ 2012-03-31 14:09  迈客封  阅读(835)  评论(0)    收藏  举报