본문 바로가기
[DATABASE] ORACLE/SQL Programing

[Oracle] Bulk Insert

by 기미차니 2022. 6. 28.
반응형

Oracle 대용량 데이터 생성 샘플

- Bulk Insert 방식

 

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
42
43
44
45
46
47
48
-- ########################
-- 1. 테이블 생성
-- ########################
drop table sample_t purge;
 
create table sample_t 
(
    id1     number,         -- i 값을 넣는 컬럼
    id2     number,         -- i 값과 랜덤값을 같이 넣어서 중복이 발생하지 않게 하는 컬럼
    name    varchar2(10),   -- data 생성시 이름넣어야 할 때 사용하는 컬럼 (랜덤이라 사람이름처럼은 나오지 않음) 
    date1   varchar2(8),    -- 2010년부터 2021년까지 '20210303' 와 같은 랜덤 문자열 날짜를 넣어주는 컬럼
    date2   varchar2(8),    -- 2021년으로 고정하고 월일만 랜덤 문자열로 날짜를 넣어주는 컬럼
    date3   date,           -- 2010년부터 2021년까지 '20210303 12:30:00' 과 같은 랜덤 date 타입 날짜일시를 넣어주는 컬럼
    phone   varchar2(13),   -- 전화번호를 랜덤으로 넣어주는 컬럼
    price   number,         -- 상품 가격 등 가격을 랜덤으로 넣어주는 컬럼(1000원~10000원까지 1천원 단위로 생성)
    qty     number,         -- 상품 수량 등 수량을 랜덤으로 넣어주는 컬럼
    test1   number,         -- 일반 숫자 컬럼
    test2   varchar2(5),    -- 일반 문자 컬럼
    test3   varchar2(4)     -- 일반 문자와 랜덤 숫자를 합친 컬럼
)
nologging;
 
 
-- ########################
-- 2. 데이터 삽입
-- ########################
DECLARE
TYPE tbl_ins IS TABLE OF sample_t%ROWTYPE INDEX BY BINARY_INTEGER;
w_ins tbl_ins;
BEGIN
FOR i IN 1..100000 LOOP 
   w_ins(i).id1   := i;
   w_ins(i).id2   := i||ceil(dbms_random.value(110000000));
   w_ins(i).name  := dbms_random.string('x',5);
   w_ins(i).date1 := round(dbms_random.value(2010,2021))||to_char(round(dbms_random.value(1,12)), 'FM09')||to_char( round(dbms_random.value(1,28)), 'FM09');
   w_ins(i).date2 := '2021'||to_char(round(dbms_random.value(1,12)) , 'FM09')||to_char(round(dbms_random.value(1,28)), 'FM09');
   w_ins(i).date3 := to_date(round(dbms_random.value(2010,2021))||'-'||round(dbms_random.value(1,12))||'-'||round(dbms_random.value(1,28))||' '||round(dbms_random.value(123))||':'||round(dbms_random.value(059))||':'||round(dbms_random.value(059)), 'YYYY-MM-DD HH24:MI:SS');
   w_ins(i).phone := '010-'||ceil(dbms_random.value(10009999))||'-'||ceil(dbms_random.value(10009999));
   w_ins(i).price := ceil(dbms_random.value(110))*1000;
   w_ins(i).qty   := ceil(dbms_random.value(110));
   w_ins(i).test1 := 1234;
   w_ins(i).test2 := 'SQLP';
   w_ins(i).test3 := 'A'||ceil(dbms_random.value(100999));
END LOOP;
FORALL i in 1..100000 INSERT INTO sample_t VALUES w_ins(i);
   COMMIT;
END;
/
cs
반응형

'[DATABASE] ORACLE > SQL Programing' 카테고리의 다른 글

[Oracle] 개행 문자열 처리  (0) 2022.08.30
[Oracle] Parallel DML (Insert)  (0) 2022.06.28
Convert Systemdate  (0) 2022.06.15
중복 데이터 삭제  (0) 2022.01.13
오라클 행열 전환(2) - 열을 행으로 전환  (0) 2022.01.13

댓글