원본 출처 :: http://www.oracleclub.com/lecture/1047
PL/SQL 테이블
PL/SQL 에서의 테이블은 오라클 SQL에서의 테이블과는 다르다. PL/SQL에서의 테이블은 일종의 일차원 배열이라고 생각하면 이해하기 쉬울것이다.
테이블은 크기에 제한이 없으면 그 ROW의 수는 데이터가 들어옴에 따라 자동 증가 한다.
BINARY_INTEGER 타입의 인덱스 번호로 순서가 정해진다.
하나의 테이블에 한 개의 컬럼 데이터를 저장 한다.
PL/SQL 테이블 문법 및 선언예제
-- 선언 예제 TYPE prdname_table IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER; -- prdname_table 테이블타입으로 prdname_tab변수를 선언해서 사용 prdname_tab prdname_table -- 아래 프로시저에서 사용된 예제를 보면 이해가 쉽게 갈 것이다.
PL/SQL 테이블 예제
SQL> 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; / -- (DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용) SQL> SET SERVEROUTPUT ON ; 실행 결과 SQL> EXECUTE Table_Test(10); 사원번호 : 7782 사원이름 : CLARK 사원급여 : 2450 사원번호 : 7839 사원이름 : KING 사원급여 : 5000 사원번호 : 7934 사원이름 : MILLER 사원급여 : 1300 PL/SQL 처리가 정상적으로 완료되었습니다. -- emp 테이블에 있는 데이터의 입력한 부서에 해당하는 사원번호, -- 사원이름, 사원급여를 뿌려주는 프로시저 이다