본문 바로가기
DATABASE/DB study

Big data insert sql script

by 개폰지밥 2020. 5. 22.
반응형

대용량 테이블 암복호화 테스트 해보고 싶음. 그럴려면 주민번호를 100만개정도 생성해야함.

주민번호를 자동으로 생성하는 sql 스크립트를 만들러 기초부터 gogo

 

구구단 3단 쿼리문을 실행 후 출력 해보고 싶으면 2가지 방법이 있다.

1)     SET SERVEROUTPUT ON

2) 왼쪽 상단의 연두색 ‘+’ 기호 클릭

출력결과

PL/SQL 기초 지식은 아래 참조

https://seul96.tistory.com/15

 

PL/SQL - 1

실무에서 알아야 할 기술은 따로있다! 오라클SQL과 PL/SQL을 다루는 기술 정리 PL/SQL 정리 시작! 1. PL/SQL 기본구조 오라클 DB를 사용해 프로그래밍을 한다는 것은 SQL과 PL/SQL을 작성하는 것으로 나눌 �

seul96.tistory.com

https://seul96.tistory.com/17

 

PL/SQL - 2

l PL/SQL의 사용자 정의 함수 지금까지의 예제는 익명 블록을 사용했는데, 사실 별로 사용하지 않는다. 일반적으로는 이름이 있는 서브 프로그램인 함수나 프로시저를 사용해 비즈니스 로직을 구�

seul96.tistory.com

 

반복문

반복문에는 LOOP. WHILE, FOR문이 있다. 각각의 반복문을 이용하여 구구단 3단 출력 해보자.

-       LOOP

LOOP
처리문;
EXIT [WHEN 조건];
END LOOP;

“EXIT WHEN 조건을 사용해 WHEN절에서 명시한 조건에 맞을 때 빠져 나가라고 명시할 수 있다.

declare
a number := 3;
b number := 1;
begin
loop
dbms_output.put_line(a*b);
b:=b+1;
exit when b>9;
end loop;
end;

 

WHILE

While 조건
Loop
처리문;
End loop;

 

declare
a number := 3;
b number := 1;
begin
while b<=9
loop
dbms_output.put_line(a*b);
b:=b+1;
end loop;
end;

 

FOR

FOR 인덱스 IN [REVERSE]초깃값..최종값
LOOP
처리문;
END LOOP;

REVERSE를 명시하면 순서가 거꾸로 된다.

 

구구단 3단을 출력하는 익명 블록을 FOR문으로 변경

declare
vn_base_num number :=3;
begin
for i in 1..9
loop
dbms_output.put_line (vn_base_num*i);
end loop;
end;

 

하지만!!!!!! 내 목표는 대용량 데이터(주민번호)를 삽입하는 SQL문을 만드는 것이다!!!!!!!!!!!!!

위에서 배운 지식들을 짬뽕해서…… 사용하면

 

1단계 : 주민번호 앞 6자리 출력해보기 (DBMS_RANDOM.VALUE라는 내장함수 이용)

declare
--주민번호 앞 6자리 저장할 변수
num number(6);
begin
--10번 반복
for i in 1..10 loop
--num111111 ~ 999999 랜덤 숫자 저장
NUM := DBMS_RANDOM.VALUE(111111, 999999);
--num출력
dbms_output.put_line(num);
end loop;
end;

출력결과 :

 

2단계 : 주민번호 뒷자리 7자리 출력하기 (to_char이라는 내장 함수 이용)

declare
--주민번호 앞 6자리 저장할 변수
num number(6);
--주민번호 뒷 첫번째 자리 남:1,3 :2,4
sex number(1);
--전체주민번호 문자열로 선언
jumin varchar2(14);
 
begin
for i in 1..10 loop
--num111111 ~ 999999 랜덤 숫자 저장
NUM := DBMS_RANDOM.VALUE(111111, 999999);
sex := DBMS_RANDOM.VALUE(1,4);
--전체 주민번호: 주민번호 앞 6자리 + 성별+주민번호 앞 6자리
jumin := to_char(num||'-'||sex||num);
--주민번호 14자리 출력
dbms_output.put_line(jumin);
end loop;
end;

 

출력결과:

 

3단계 : 주민번호 실제 테이블에 insert 하기

먼저 TABLE 생성

CREATE TABLE TB_SAMPLE01(
JUMIN VARCHAR(50));

 

TB_SAMPLE01JUMIN 컬럼 추가

declare
num number(6);
sex number(1);
jumin varchar2(14);
 
begin
for i in 1..10 loop
NUM := DBMS_RANDOM.VALUE(111111, 999999);
sex := DBMS_RANDOM.VALUE(1,4);
jumin := to_char(num||'-'||sex||num);
 
--TB_SAMPLE01 JUMIN 컬럼 추가
INSERT INTO TB_SAMPLE01 VALUES(JUMIN);
end loop;
end;

 

출력결과:

우선 이렇게 랜덤으로 생성된 주민번호는 실제 주민번호는 아니고 엉터리 주민번호이다. 예를 들어 왜냐하면 달은 1월에서 12까지밖에 없고 이런 조건들을 집어넣어주지 않았기 때문이다.

나중에는 실제 주민번호를 만드는 프로시저를.... 만들어 보기로하자...

-       -

오라클 SQL PL/SQL을 다루는 기술 보면서 공부 참고했음

반응형

댓글