개발/DB
[DB]PL/SQL 프로시저 기초-기본 문법 3정리(%rowtype)
개발햄
2019. 7. 2. 21:13
%ROWTYPE
- 테이블이나 뷰 내부의 컬럼 데이터 형 , 크기 , 속성을 그대로 사용할 수 있다.
- 테이블이름%ROWTYPE ; 으로 사용
- 지정된 테이블의 구조와 같은 변수 구조를 선언 할 수 있다.
- DB컬럼의 데이터타입, 컬럼의 수 등등 알기 어려울 때 쓰면 편하다
- 테이블의 컬럼이 변경돼도 수정할 필요 없다.
%ROWTYPE 예제
create or replace PROCEDURE ROW_TYPE_TEST
IS
test_emp emp%ROWTYPE;
BEGIN
SELECT empno, ename, sal
INTO test_emp.empno, test_emp.ename, test_emp.sal
FROM emp
WHERE empno = 7369;
DBMS_OUTPUT.PUT_LINE('empno: ' || test_emp.empno);
DBMS_OUTPUT.PUT_LINE('ename: ' || test_emp.ename);
DBMS_OUTPUT.PUT_LINE('sal: ' || test_emp.sal);
END;
---=----출력---------
empno: 7369
ename: SMITH
sal: 800
Table 문법
--예제
TYPE emp_Table IS TABLE OF VARCHAR(30)
INDEX OF BINATY_INTEGER;
--emp_Table 테이블 타입 -> emp_Table_li 변수에 넣기
emp_Table_li emp_Table
Table 예제
create or replace PROCEDURE table_TEST
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;
--table타입으로 변수에 저장
empno_col empno_table;
ename_col ename_table;
sal_col sal_table;
i BINARY_INTEGER := 0;
BEGIN
FOR emp_list IN ( SELECT empno, ename, sal FROM emp) LOOP
i := i+1;
empno_col(i) := emp_list.empno;
ename_col(i) := emp_list.ename;
sal_col(i) := emp_list.sal;
END LOOP;
FOR cnt IN 1..i LOOP
DBMS_OUTPUT.PUT_LINE(' empno: ' || empno_col(cnt));
DBMS_OUTPUT.PUT_LINE(' ename: ' || ename_col(cnt));
DBMS_OUTPUT.PUT_LINE(' sal: ' || sal_col(cnt));
END LOOP;
END;
-----출력
empno: 7369
ename: SMITH
sal: 800
empno: 7499
ename: ALLEN
sal: 1600
empno: 7521
ename: WARD
sal: 1250
empno: 7566
ename: JONES
sal: 2975
empno: 7654
ename: MARTIN
sal: 1250
empno: 7698
ename: BLAKE
sal: 2850
empno: 7782
ename: CLARK
sal: 2450
empno: 7788
ename: SCOTT
sal: 3000
empno: 7839
ename: KING
sal: 5000
empno: 7844
ename: TURNER
sal: 1500
empno: 7876
ename: ADAMS
sal: 1100
empno: 7900
ename: JAMES
sal: 950
empno: 7902
ename: FORD
sal: 3000
empno: 7934
ename: MILLER
sal: 1300