IT•개발 끄적/SQL

[SQL] 오라클 삽입문 반복 방법, Oracle insert LOOP FOR(PL/SQL)

소다맛사탕 2021. 5. 5. 15:30
반응형

안녕하세요. 소다맛사탕 입니다.

기본적으로 테이블을 생성하고 컬럼에 값을 집어넣고 싶은데 기본적인 INSERT문이 아닌 PL/SQL의 LOOP와 FOR문을 이용하여 값을 여러개 집어넣는 방법에 대해 알아 보겠습니다.

 

값을 집어 넣기에 앞서 PL/SQLLOOPFOR에 대해 알아보겠습니다.

 

1. LOOP문

루프를 돌며 반복해서 로직을 처리하는 반복문.
LOOP
  처리문;
  EXIT [WHEN 조건];
END LOOP;

---ex)
DECLARE
	vn_num1 NUMBER := 2;
    vn_num2 NUMBER := 1;
BEGIN
	LOOP
		DBMS_OUTPUT.PUT_LINE (vn_num1 || '*' || vn_num2 || '='
							|| vn_num1 * vn_num2);
		vn_num2 := vn_num2 + 1;			-- java의 vn_num2++;과 같음.
		EXIT WHEN vn_num2 > 10;			-- 10보다 크면 루프종료.
	END LOOP;
END;
----- 결과 -----
2*1=2
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
2*10=20

 

2. FOR문

루프를 돌며 반복해고, 인덱스는 초기값에서 시작해 최종값까지 루프를 돌며 1씩 증가.
FOR 인덱스 IN [REVERSE]초기값..최종값
LOOP
  처리문;
END LOOP;
---ex)
DECLARE
 vn_num NUMBER := 3;
BEGIN
	FOR i IN 1..9
	LOOP
	 DBMS_OUTPUT.PUT_LINE(vn_num || '*' || i || '= ' || vn_num * i);
	END LOOP;
END; 
---- 결과 ----
3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27

; REVERSE를 명시하게 되면 순서가 거꾸로 됩니다.

DBMS_OUTPUT.PUT_LINE은 서버의 출력 내용으로 보겠다는 얘기 입니다.java의 콘솔창과 같습니다.

 

 


그럼 이제 오늘의 핵심인 생성한 테이블에 PL/SQL의 LOOP문, FOR문을 사용하여

데이터를 순서대로 넣는 방법에 대한 예시를 적어보겠습니다.

테이블 데이터 insert for문

-- 생성한 테이블
CREATE TABLE TEST_EXAMPLE_TB (
    seq_no NUMBER NOT NULL,
    data1 VARCHAR2(100),
    data2 VARCHAR2(100)
);

---- PL/SQL LOOP, FOR문 ----
DECLARE
 vn_data1 VARCHAR2(100) := 'test1_';
 vn_data2 VARCHAR2(100) := 'test2_';
BEGIN
	 FOR i IN 1..10
	 LOOP
	 INSERT INTO TEST_EXAMPLE_TB
	 VALUES
	 (i, vn_data1 || i, vn_data2 || i);
	END LOOP;
    COMMIT;
END;

---- 결과 ----

PL/SQL LOOP, FOR문 INSERT 결과

보시는 것과 같이 인덱스를 1~ 10까지 반복문(FOR문)이용해 처리한 결과입니다.

 

이처럼 DB를 이용하여 테이블의 데이터를 여러개를 넣고 싶다면 위와 같은 PL/SQL을 이용해 진행하시면 됩니다.