반응형
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(1, 10000000));
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(1, 23))||':'||round(dbms_random.value(0, 59))||':'||round(dbms_random.value(0, 59)), 'YYYY-MM-DD HH24:MI:SS');
w_ins(i).phone := '010-'||ceil(dbms_random.value(1000, 9999))||'-'||ceil(dbms_random.value(1000, 9999));
w_ins(i).price := ceil(dbms_random.value(1, 10))*1000;
w_ins(i).qty := ceil(dbms_random.value(1, 10));
w_ins(i).test1 := 1234;
w_ins(i).test2 := 'SQLP';
w_ins(i).test3 := 'A'||ceil(dbms_random.value(100, 999));
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 |
댓글