본문 바로가기

Windows Developer/Oracle

[oracle] %TYPE과 %ROWTYPE

%TYPE 데이터형

 %TYPE 데이터형은 기술한 데이터베이스 테이블의 컬럼 데이터 타입을 모를 경우 사용할 수 있고,

⊙ 또코딩이후 데이터베이스 컬럼의 데이터 타입이 변경될 경우 다시 수정할 필요가 없습니다.

⊙ 이미 선언된 다른 변수나 데이터베이스 컬럼의 데이터 타입을 이용하여 선언합니다.

  데이터 베이스 테이블과 컬럼 그리고 이미 선언한 변수명이 %TYPE앞에 올수 있습니다.

%TYPE 속성을 이용하여 얻을 수 있는 장점

   기술한 DB column definition을 정확히 알지 못하는 경우에 사용할 수 있다.

   기술한 DB column definition이 변경 되어도 다시 PL/SQL을 고칠 필요가 없다.

예제

v_empno  emp.empno%TYPE := 7900 ;

v_ename emp.ename%TYPE;


 예제 프로시져..

SQL>CREATE OR REPLACE PROCEDURE Emp_Info

      /* IN Parameter */

      ( p_empno IN emp.empno%TYPE )

        IS

        /* %TYPE 데이터형 변수 선언 */

        v_empno emp.empno%TYPE;

        v_ename emp.ename%TYPE;

        v_sal   emp.sal%TYPE;

        BEGIN

        DBMS_OUTPUT.ENABLE;

        /* %TYPE 데이터형 변수 사용 */

        SELECT empno, ename, sal

        INTO v_empno, v_ename, v_sal 

        FROM emp

        WHERE empno = p_empno ;

        /* 결과값 출력 */

        DBMS_OUTPUT.PUT_LINE( '사원번호 : ' || v_empno );

        DBMS_OUTPUT.PUT_LINE( '사원이름 : ' || v_ename );

        DBMS_OUTPUT.PUT_LINE( '사원급여 : ' || v_sal );

        END;

       /

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

SQL>SET SERVEROUTPUT ON;     --  DBMS_OUTPUT 결과값을 화면에 출력 하기위해

실행 결과

SQL> EXECUTE Emp_Info(7369);


사원번호 : 7369

사원이름 : SMITH

사원급여 : 880

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





%ROWTYPE

하나 이상의 데이터값을 갖는 데이터 타입으로 배열과 비슷한 역할을 하고 재사용이 가능합니다.

%ROWTYPE데이터 형과, PL/SQL테이블과 레코드가 복합 데이터 타입에 속합니다.

%ROWTYPE

  테이블이나 뷰 내부의 컬럼 데이터형크기속석등을 그대로 사용할수 있습니다.

  %ROWTYPE 앞에 오는 것은 데이터 베이스 테이블 이름입니다.

  지정된 테이블의 구조와 동일한 구조를 갖는 변수를 선언할수 있습니다.

  데이터베이스 컬럼들의 수나 DATATYPE을 알지 못할 때 편리 합니다.

  테이블의 데이터 컬럼의 DATATYPE이 변경될 경우 프로그램을 재수정할 필요가 없습니다. 


%ROWTYPE 예제 프로시져..

SQL>CREATE OR REPLACE PROCEDURE RowType_Test

        ( p_empno IN emp.empno%TYPE )

    IS

        /* %ROWTYPE 변수 선언 */

        v_emp   emp%ROWTYPE ;

   BEGIN

        DBMS_OUTPUT.ENABLE;

        /* %ROWTYPE 변수 사용 */

        SELECT empno, ename, hiredate

        INTO v_emp.empno, v_emp.ename, v_emp.hiredate

        FROM emp

        WHERE empno = p_empno;

       DBMS_OUTPUT.PUT_LINE( '사원번호 : ' || v_emp.empno );

       DBMS_OUTPUT.PUT_LINE( '사원이름 : ' || v_emp.ename );

       DBMS_OUTPUT.PUT_LINE( '입 사 일 : ' || v_emp.hiredate );

   END;

        /

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

실행 결과

SQL> SET SERVEROUTPUT ON ;  -- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용

SQL> EXECUTE RowType_Test(7900);


사원번호 : 7900

사원이름 : JAMES

입 사 일 : 81/12/03

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

'Windows Developer > Oracle' 카테고리의 다른 글

[Oracle]바인드 변수  (0) 2011.02.11
[Oracle] 리터럴 변수와 바인딩 변수  (0) 2011.02.11
[Oracle] 인덱스의 구조  (0) 2011.01.08
[Oracle] 인덱스 란?  (0) 2011.01.08
[Oracle] 명시적 커서와 암시적 커서  (1) 2011.01.07