Oracle/[YT] 오라클 실습
#3~5. Table 데이타 생성 (100만개 만들기, PL/SQL , 시퀀스 사용)
고인돌개발자
2021. 9. 12. 14:58
1. 고객 계정 만들기
▶ 고객계정 user_id 시퀀스 생성 스크립트
CREATE SEQUENCE "SCOTT"."SQ_YT_CUSTOMER_USREID"
MINVALUE 1
MAXVALUE 999999999
INCREMENT BY 1
START WITH 1
NOCYCLE
NOCACHE
;
▶ 고객계정 100만개 생성 스크립트 (PL/SQL)
DECLARE
n NUMBER;
v_user_id varchar2(50);
v_date date;
BEGIN
for n in 1 .. 1000000 loop
v_user_id := '1'||lpad(SQ_YT_CUSTOMER_USREID.nextval,9,'0');
If mod(n, 100) = 0 Then
v_date := sysdate -n ;
End IF;
insert into YT_CUSTOMER (USER_ID,PASSWD,USER_NM,MOBILE,EMAIL,JUSO,REG_DAY,MODI_DAY)
values (v_user_id , '0000','홍길동'||v_user_id, '010-0000-'||v_user_id,
v_user_id||'@gmail.com', '대한민국 서울 '||v_user_id, v_date, null);
end loop;
END;
2. 상품정보 생성
▶ 상품정보 prd_id 시퀀스 생성 스크립트
CREATE SEQUENCE "SCOTT"."SQ_YT_CUSTOMER_PRODUCTID"
MINVALUE 1
MAXVALUE 999999999
INCREMENT BY 1
START WITH 1
NOCYCLE
NOCACHE
;
▶ 상품정보 100만개 생성 스크립트 (PL/SQL)
DECLARE
n NUMBER;
--v_prd_id varchar2(50);
v_prd_id YT_PRODUCT.prd_id%type;
v_date date;
BEGIN
for n in 1 .. 1000000 loop
v_prd_id := 'P'||lpad(SQ_YT_CUSTOMER_PRODUCTID.nextval,9,'0');
If mod(n, 100) = 0 Then
v_date := sysdate -n ;
End IF;
insert into YT_PRODUCT (PRD_ID, PRD_NM, SPEC, MAKER, MODEL,
PRICE_SALE, PRICE_BUY, REG_DAY, MODI_DAY)
values (v_prd_id, '품명-'||v_prd_id , '규격-'||v_prd_id, '제조사-'||v_prd_id, '모델-'||v_prd_id,
n+10, n, v_date, null)
;
end loop;
END;
3. 주문정보 생성
▶ 상품정보 prd_id 시퀀스 생성 스크립트
CREATE SEQUENCE "SCOTT"."SQ_YT_ORDER_INFO_ORDNO"
MINVALUE 1
MAXVALUE 999999999
INCREMENT BY 1
START WITH 1
NOCYCLE
NOCACHE
;
▶ 주문정보 100만개 생성 스크립트 (PL/SQL)
DECLARE
n NUMBER;
--v_prd_id varchar2(50);
v_ord_no YT_ORDER_INFO.ord_no%type;
v_date date;
v_user_id yt_customer.user_id%type;
v_prd_id yt_product.prd_id%type;
BEGIN
for n in 1 .. 1000000 loop
v_ord_no := 'J'||lpad(SQ_YT_ORDER_INFO_ORDNO.nextval,9,'0');
If mod(n, 100) = 0 Then
v_date := sysdate -n ;
End IF;
v_user_id := trunc(DBMS_RANDOM.value(1001000002,1002000002));
v_prd_id := 'P'||lpad(trunc(DBMS_RANDOM.value(1,1000001)),9,'0');
insert into YT_ORDER_INFO (ORD_NO,USER_ID,PRD_ID,PRICE_SALE,PRICE_BUY,JUSO,MEMO,REG_DAY,MODI_DAY)
values (v_ord_no,v_user_id,v_prd_id,null,null,null,'배송정보-'||v_ord_no, v_date,null);
end loop;
END;
▶ 주문정보 날짜 생성 스크립트 (PL/SQL , 커서 for loop)
Declare
i number;
j number;
v_date date :=sysdate;
BEGIN
i := 0;
j := 0;
FOR fc IN
( select * from yt_order_info order by ord_no )
LOOP
--dbms_output.put_line('I =>'||i);
i := i+1;
IF Mod(i, 1000) = 0 THEN
j := j+1;
v_date := sysdate -j ;
END IF ;
update yt_order_info a
set a.reg_day = v_date
where a.ord_no=fc.ord_no;
END LOOP;
End;