Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-member domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /ledcorps/www/wp/wp-includes/functions.php on line 6114 3.2.2 PL/SQL 테이블 – 대나무숲

3.2.2 PL/SQL 테이블

출처 http://www.gurubee.net/lecture/1047

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 테이블에 있는 데이터의 입력한 부서에 해당하는 사원번호, 
-- 사원이름, 사원급여를 뿌려주는 프로시저 이다 

    

답글 남기기 0

Your email address will not be published. Required fields are marked *