CREATE OR REPLACE FUNCTION F_PMJ_JUMIN2(V_NUM IN VARCHAR2)
RETURN VARCHAR2
AS
A1 VARCHAR2(13);
A2 VARCHAR2(7);
A3 VARCHAR2(7);
A4 VARCHAR2(7);
A5 VARCHAR2(7);
A6 VARCHAR2(7);
B VARCHAR2(7) ;
BEGIN
SELECT
NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,1,2),'[0-9]{2}'),'E') A2
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,3,2),'(0[1-9]|1[0-2])'),'E') A3
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,5,2),'[0-9]{2}'),'E') A4
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,7,1),'[1-4]{1}'),'E') A5
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,8,5),'[0-9]{5}'),'E') A6
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,13,1),'[0-9]{1}'),'E') B
INTO A2,A3,A4,A5,A6,B
FROM DUAL;
IF A4 < SUBSTR(LAST_DAY(TO_DATE(A2||A3,'YYMM')),7,2) THEN
RETURN A2||A3||A4||A5||A6||B;
ELSE RETURN A2||A3||'E' ;
END IF;
END ;
--문자들어가는거 수정<= 현재 LASTDAY에 A2,A3가 묶여있어서 문제가 심각해보임
CREATE OR REPLACE FUNCTION F_PMJ_JUMIN2(V_NUM IN VARCHAR2)
RETURN VARCHAR2
AS
A1 VARCHAR2(13);
A2 VARCHAR2(7);
A3 VARCHAR2(7);
A4 VARCHAR2(7);
A5 VARCHAR2(7);
A6 VARCHAR2(7);
B VARCHAR2(7) ;
C VARCHAR2(7) ;
G VARCHAR2(15);
H VARCHAR2(15);
I VARCHAR2(15);
T_NUM varchar2(12) := '234567892345';
S_NUM VARCHAR(15);
BEGIN
SELECT
NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,1,2),'[0-9]{2}'),'E') A2
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,3,2),'(0[1-9]|1[0-2])'),'E') A3
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,5,2),'[0-9]{2}'),'E') A4
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,7,1),'[1-4]{1}'),'E') A5
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,8,5),'[0-9]{5}'),'E') A6
,NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,13,1),'[0-9]{1}'),'E') B
,DECODE(NVL(REGEXP_SUBSTR(SUBSTR(V_NUM,7,1),'[1-4]{1}'),'E'),1,'19',2,'19',3,'20',4,'20') C
INTO A2,A3,A4,A5,A6,B,C
FROM DUAL;
IF A2 ='E' THEN
RETURN 'E' ;
ELSIF A3='E' THEN
RETURN A2||'E';
ELSIF A4='E' THEN
RETURN A2||A3||'E';
ELSIF A4> SUBSTR(LAST_DAY(TO_DATE(C||A2||A3,'YYYYMM')),7,2) THEN
RETURN A2||A3||'E';
ELSIF A5='E' THEN
RETURN A2||A3||A4||'E' ;
ELSE
G := 0;
FOR a IN 1..12 LOOP
H := to_number(substr(T_NUM,a,1));
I := to_number(substr(V_NUM,a,1));
G := G + (H*I);
END LOOP;
G := mod((11 - (mod(G,11))),10);
IF G = B
THEN return A2||A3||A4||A5||A6||B ;
ELSE return A2||A3||A4||A5||A6||'E';
END IF;
END IF;
END ;
현재 여기까지 했고 중간 7번째 자리도 문자나 1~4를 벗어난 수가 오면 E를 주고 싶은데 오류입니다. 어떤게 오류인지 알려주실수 있으신가요??
-- 변경전 -- ELSIF A4='E' THEN RETURN A2||A3||'E'; ELSIF A4> SUBSTR(LAST_DAY(TO_DATE(C||A2||A3,'YYYYMM')),7,2) THEN RETURN A2||A3||'E'; ELSIF A5='E' THEN -- 변경후 (v_dt DATE 미리 선언) -- ELSIF A4='E' THEN RETURN A2||A3||'E'; ELSE BEGIN v_dt := TO_DATE(c||a2||a3||a4, 'yyyymmdd'); EXCEPTION WHEN OTHERS THEN RETURN A2||A3||'E'; END; END IF; IF A5='E' THEN