SQL
[PL/SQL] FOR
seonzone
2021. 8. 10. 17:12
FOR
PL/SQL 에서도 JAVA와 같이 FOR,WHILE 문 같은 반복문을 사용할 수 있다.
FOR [지정이름] IN 시작값..END값 LOOP
반복할 내용
...
END LOOP;
지정이름은 우리가 함수의 이름을 정하듯이 사용할 수 있으며 시작값과 종료 값을 숫자나 binary_integer형으로 선언한 변수를 사용할 수 있다.
만약 시작값이
i BINARY_INTEGER:=0;
일 경우 0부터 시작하게 되는것이다.
FOR문도 BEGIN 이후로 사용해주면 된다.
예제테이블
SELECT * FROM EMP
WHERE DEPTNO=10;

CREATE OR REPLACE PROCEDURE TABLEEX(V_DEPTNO IN EMP.DEPTNO%TYPE)
IS
TYPE EMPNO_TABLE IS TABLE OF EMP.EMPNO%TYPE INDEX BY BINARY_INTEGER;
TYPE ENAME_TABLE IS TABLE OF EMP.ENAME%TYPE INDEX BY BINARY_INTEGER;
TYPE SAL_TABLE IS TABLE OF EMP.SAL%TYPE INDEX BY BINARY_INTEGER;
TYPE JOB_TABLE IS TABLE OF EMP.JOB%TYPE INDEX BY BINARY_INTEGER;
EMPNO_V EMPNO_TABLE;
ENAME_V ENAME_TABLE;
SAL_V SAL_TABLE;
JOB_V JOB_TABLE;
i BINARY_INTEGER:=0;
BEGIN
FOR EMP_LIST IN (SELECT EMPNO,ENAME,SAL,JOB FROM EMP WHERE DEPTNO=V_DEPTNO)LOOP
i:=i+1;
EMPNO_V(i):=EMP_LIST.EMPNO;
ENAME_V(i):=EMP_LIST.ENAME;
SAL_V(i):=EMP_LIST.SAL;
JOB_V(i):=EMP_LIST.JOB;
END LOOP;
FOR CNT IN 1..i LOOP
dbms_output.put_line('사원번호:'|| EMPNO_V(CNT));
dbms_output.put_line('사원이름:'|| ENAME_V(CNT));
dbms_output.put_line('사원연봉:'|| SAL_V(CNT));
dbms_output.put_line('사원직업:'|| JOB_V(CNT));
END LOOP;
END TABLEEX;
TYPE EMPNO_TABLE IS TABLE OF EMP.EMPNO%TYPE INDEX BY BINARY_INTEGER
각 컬럼에서 사용할 테이블을 선언한다.
i BINARY_INTEGER:=0
i를 0으로 초기화 한다.
EMPNO_V(i):=EMP_LIST.EMPNO
EMPNO_V(i)의 0번째 부터 EMP_LIST.EMPNO를 넣어준다.
FOR CNT IN 1..i LOOP dbms_output.put_line('사원번호:'|| EMPNO_V(CNT))
CNT라는 함수에서 1부터 i 까지 반복문을 돌려 출력한다.
