IT정보

PL/SQL 테이블을 이용한 예제 Procedure(프로시져)

YUNOLAND 2008. 7. 9. 11:31
PL/SQL 테이블
  
   PL/SQL 에서의 테이블은 오라클 SQL 에서의 테이블과는 다르다.
   PL/SQL 에서의 테이블은 일종의 일차원 배열이라고 생각하면 된다.

   - 테이블은 크리에 제한이 없으며 그 ROW의 수는 데이터가 들어옴에 따라 자동 증가
   - BINARY_INTEGER 타입의 인덱스 번호로 순서가 정해짐
   - 하나의 테이블에 한 개의 컬럼 데이터를 저장

PL/SQL 테이블을 이용한 예제 하나!

emp 테이블에 있는 데이터의 입력한 부서(v_deptno)에 해당하는 사원번호, 사원이름, 사원급여를 뿌려주는 프로시져!!


CREATE OR REPLACE PROCEDURE Table_Test (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;

-- 테이블 타입으로 변수를 선언해서 사용!
empno_tab empno_table;
ename_tab ename_table;
sal_tab sal_table;
i BINARY_INTEGER := 0;

BEGIN

DBMS_OUTPUT.ENABLE;

FOR emp_list IN(SELECT empno, ename, sal FROM emp WHERE deptno = v_deptno) LOOP

/* emp_list 는 자동선언되는 BINARY_INTEGER 형 변수로 1씩 증가한다
    emp_list 대신 다른 문자열 사용가능 */
    i := i + 1;

    -- 테이블 변수에 검색된 결과를 넣는다
    empno_tab(i) := emp_list.empno;
    ename_tab(i) := emp_list.ename;
    sal_tab(i) := emp_list.sal;
END LOOP;

-- 1부터 i까지 FOR문을 실행
FOR cnt IN 1..i LOOP

    -- TABLE 변수에 넣은 값을 뿌림
    DBMS_OUTPUT.PUT_LINE('사원번호 : ' || empno_tab(cnt));
    DBMS_OUTPUT.PUT_LINE('사원이름 : ' || ename_tab(cnt));
    DBMS_OUTPUT.PUT_LINE('사원급여 : ' || sal_tab(cnt));
END LOOP;
END;
/

프로시져가 생성되었습니다.

<실행 결과>

EXECUTE Table_Test(10)  -- v_deptno를 매개 변수로 넣어서 같은 결과값 전부 출력!

사원번호 : 7782
사원이름 : CLARK
사원급여 : 2450
사원번호 : 7839
사원이름 : KING
사원급여 : 5000
          .
          .
          .
          .

PL/SQL 처리가 정상적으로 완료되었습니다.