PL/SQL(Procedual Language)
PL/SQL은 오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 프로그래밍 언어 중 하나이다.(위키 참고)
SQL은 비절차언어인 반면, PL/SQL은 영문 뜻대로 절차지향 프로그래밍 언어이다.
SQL로 다양한 처리를 할 수 있지만 그 한계(?)를 PL/SQL로 해결할 수 있다. 변수를 선언하거나 for문, 값을 리턴하는 등 프로그래밍적 요소를 추가해서 말이다.
오늘은 FOR문에 대해 정리를 해놓으려 하는데 그 중에서도 테이블의 ROW 수를 이용한 FOR문과 일반적인 상수를 이용한 FOR문이다.
먼저 테이블의 ROW 수만큼 FOR문을 돌리는 방법이다.
[변수] [데이터 타입] -- 변수(입출력 변수가 아닐 경우 DECLARE 영역 밖에 선언되어도 무방)
BEGIN
-- 테이블 ROW 수 만큼 반복
FOR [변수명] IN
(
[테이블]
)
LOOP
[반복 수행문]
END LOOP;
END;
/
예로, PERSON이라는 변수에 MEMBER 테이블의 회원이름을 연속적으로 입력하려고 한다.
아래 쿼리를 보면 RP.MNAME이 RP라는 변수 안에 MNAME이라는 컬럼 값을 넣은 것을 예상할 수 있을 것이다.
즉 MEMBER라는 테이블의 아래와 같은 데이터가 있을 때
MEMBER |
1 |
김민수 |
2 |
조현우 |
3 |
이승우 |
4 |
박지민 |
FOR문을 통해 PERSON 안에는 "김민수조현우이승우박지민" 이런 형태로 데이터가 입력된다.
PERSON VARCHAR2(1000); -- 변수(입출력 변수가 아닐 경우 DECLARE 영역 밖에 선언되어도 무방)
BEGIN
-- 테이블 ROW 수 만큼 반복
FOR RP IN
(
SELECT MNAME
FROM MEMBER
)
LOOP
PERSON := PERSON||RP.MNAME;
END LOOP;
END;
/
다음은 단순히 상수로 반복을 시키는 방법이다.
반복문에서 사용될 변수는 DECLARE에서 선언되면 안되며, 초기값부터 최종값까지 우리가 흔히 사용하는 for문처럼 사용된다고 생각하면 된다.
LOOP문 안쪽에는 반복될 연산을 입력해주면 된다.
DECLARE
[변수] [데이터 타입]
BEGIN
FOR [반복문에서 사용될 변수] IN [초기값]..[최종값]
LOOP
[반복 수행문]
END LOOP;
END;
/
아래는 구구단의 9단을 출력하는 예이다. 참고하시길..
DECLARE
GUGUD NUMBER;
BEGIN
NUMBER := 9;
FOR i IN 1..9
LOOP
DBMS_OUTPUT.PUT_LINE ( NUMBER || '*' || i || '=' || NUMBER*i);
END LOOP;
END;
/
+ 피드백은 언제나 환영입니다 :)