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 처리가 정상적으로 완료되었습니다.
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 처리가 정상적으로 완료되었습니다.
'IT정보' 카테고리의 다른 글
SQL Loader 예제 (0) | 2008.07.15 |
---|---|
SQL Loader란? (0) | 2008.07.15 |
%ROWTYPE 속성을 이용한 Procedure(프로시져) 기본 예제 (0) | 2008.07.09 |
%TYPE 속성을 이용한 Procedure(프로시져) 기본 예제 (0) | 2008.07.09 |
Eclipse에 Tomcat 연동하기 (0) | 2008.07.08 |