DATABASE/DB study

Big data insert sql script

개폰지밥 2020. 5. 22. 16:59
반응형

대용량 테이블 암복호화 테스트 해보고 싶음. 그럴려면 주민번호를 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을 다루는 기술 보면서 공부 참고했음

반응형