주민번호, 법인번호 생성 함수
함수생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 |
CREATE OR REPLACE FUNCTION NH_CAP.GET_FNOSIL
(
V_FNO IN VARCHAR2,
V_YEAR IN VARCHAR2
)
RETURN VARCHAR2
IS
OUT_REAL_NO VARCHAR2(100);
BEGIN
IF V_FNO = 'E' THEN /* E는 법인번호 */
SELECT ROUND(DBMS_RANDOM.VALUE(1101 , 2850), 0) || /* 등기관서번호 4자리 */
ROUND(DBMS_RANDOM.VALUE(11 , 86), 0) || /* 법인종류번호 2자리 */
LPAD(ROUND(DBMS_RANDOM.VALUE(0 , 9999999), 0), 7, '0') /* 일련번호6자리 오류검색번호1자리 */
INTO OUT_REAL_NO
FROM DUAL;
ELSIF V_FNO = 'P' THEN /* P는 주민번호 */
IF (TO_NUMBER(V_YEAR)) >= 2020 THEN /* 2000년도 이후 출생자 */
SELECT LPAD(ROUND(DBMS_RANDOM.VALUE(30 , TO_NUMBER(SUBSTR(V_YEAR , 3 , 2))), 0), 2 , '0') || /* 현재년도까지 생성*/
LPAD(ROUND(DBMS_RANDOM.VALUE(1 , 12),0), 2 , '0') ||
LPAD(ROUND(DBMS_RANDOM.VALUE(1 , 31),0), 2 , '0') ||
ROUND(DBMS_RANDOM.VALUE(3000000 , 4999999), 0)
INTO OUT_REAL_NO
FROM DUAL;
ELSE
SELECT LPAD(ROUND(DBMS_RANDOM.VALUE(30 , TO_NUMBER(SUBSTR(V_YEAR , 3 , 2))), 0), 2 , '0') ||
LPAD(ROUND(DBMS_RANDOM.VALUE(1 , 12), 0), 2 , '0') ||
LPAD(ROUND(DBMS_RANDOM.VALUE(1 , 31), 0), 2 , '0') ||
ROUND(DBMS_RANDOM.VALUE(1000000 , 2999999), 0)
INTO OUT_REAL_NO
FROM DUAL;
END IF;
END IF;
RETURN OUT_REAL_NO;
END;
/
|
cs |
함수호출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
DECLARE
V_OUTPUT VARCHAR2(200);
BEGIN
for i in 1 .. 5 LOOP
V_OUTPUT := GET_FNOSIL('E','1995');
DBMS_OUTPUT.PUT_LINE(V_OUTPUT);
END LOOP;
END;
|
cs |
'oracle' 카테고리의 다른 글
SELECT * FROM ALL_SOURCE (0) | 2015.08.31 |
---|---|
조회 건수가 틀릴때 확인방법 (0) | 2015.08.31 |
DICTIONARY, ALL_TAB_COMMENTS, ALL_COL_COMMENTS (0) | 2015.04.06 |
이름 생성 함수 (0) | 2015.04.06 |
끝나는날짜 구하는 함수(함수호출 사용법과 생성법) (0) | 2015.04.06 |