SQL

[PL/SQL] FOR

seonzone 2021. 8. 10. 17:12

FOR

PL/SQL 에서도 JAVA와 같이 FOR,WHILE 문 같은 반복문을 사용할 수 있다.

FOR [지정이름] IN 시작값..ENDLOOP
    반복할 내용 
    ...
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 까지 반복문을 돌려 출력한다.

실행결과