--isnumeric 선행

CREATE OR REPLACE FUNCTION ERR_CHECK (p_value IN VARCHAR2,n_check IN VARCHAR2,l_check NUMBER,c_check VARCHAR2,d_check VARCHAR2) RETURN VARCHAR2          
   --p_value : 입력 데이터 값       
--체크는 아래의 순서대로 먼저 체크하고 에러가 있을시 이후는 체크안하게 됨.       
--n_check : NULL체크 (체크시 'Y'로 : NULL일 경우 :'N'리턴)       
--l_check : 최대 길이체크(체크시 허용최대길이로, 0일시 미체크 : 초과시 'L허용길이'리턴)       
--c_check : CODE체크 (코드로 체크시 'C'+코드CD로, 코드값으로 체크시 'N'+코드CD로, 미체크시 '!'로: 매칭이 안될 경우 :'C'리턴)       
--d_check : 숫자여부체크(체크시 'Y'로 : 숫자가 아닐시 'D'리턴)       
AS          
p_cd VARCHAR2(255);        
p_nm VARCHAR2(255);        
p_gubun varchar2(1);        
BEGIN           
   IF n_check='Y' THEN     
    IF p_value IS NULL THEN RETURN 'N'; END IF;     
   END IF;        
           
   IF l_check<>0 THEN     
    IF LENGTHB(NVL(p_value, ' '))>L_CHECK THEN RETURN 'L'||l_check ; END IF;     
   END IF;         
      
   IF c_check<>'!' THEN     
       p_gubun:=substr(c_check,1,1);      
       p_cd:='';      
       p_nm:='';      
       IF p_gubun='C'      
       THEN        
           SELECT /*+INDEX_DESC(B CODE_SUB_PK_)*/ NVL(MAX(CD),'!F') INTO p_cd FROM CODE_SUB B WHERE B.NO=substr(C_CHECK,2) AND B.CD=TRIM(p_value);           
       END IF; 
       
       IF p_gubun='N'
       THEN 
           SELECT /*+INDEX_DESC(B CODE_SUB_PK_)*/ NVL(MAX(CD),'!F') INTO p_nm FROM CODE_SUB B WHERE B.NO=substr(C_CHECK,2) AND B.CD_NM1=TRIM(p_value);          
       END IF;      
             
       IF (p_gubun='C' and p_cd='!F') or (p_gubun='N' and p_nm='!F') THEN RETURN 'C';        
       END IF;        
   END IF;     
           
   IF d_check='Y' THEN     
    IF ISNUMERIC(NVL(p_value,0))=0 THEN RETURN 'D'; END IF;     
   END IF;           
   RETURN 'T';        
           
           
EXCEPTION           
   WHEN OTHERS THEN           
      RETURN 'E';           
END;
/

AND