본문 바로가기

데이터베이스/PL/SQL

PL/SQL - 속성


PL/SQL 변수와 커서는 속성을 가집니다. 속성은 정의를 반복하지 않고 항목의 데이터 유형과 구조를 참조할 수 있도록 합니다. 데이터베이스 열과 테이블은 유사한 속성을 가지므로 손쉬운 유지 관리에 사용할 수 있습니다. 속성 표시자로 퍼센트 기호(%)를 사용합니다.

%TYPE

% T Y P E 속성은 변수 또는 데이터베이스 열의 데이터 유형을 제공합니다. 이 속성은 데이터베이스 값을 저장할 변수를 선언할 때 특히 유용합니다.

my_title books.title%TYPE;

% T Y P E 속성을 사용하여 m y _ t i t l e을 선언하면 다음 두 가지 장점을 갖습니다.
첫째,t i t l e의 정확한 데이터 유형을 몰라도 되고
둘째, t i t l e의 데이터베이스 정의를 (예를 들어, 더 긴 문자열로) 변경하는 경우 m y _ t i t l e의 데이터 유형도 실행 시간에 그에 따라 변경됩니다.

%ROWTYPE
PL/SQL에서 레코드는 데이터를 그룹화하는데 사용되며 데이터 값을 저장할 수 있는 여러 관련 필드로 구성됩니다. % R O W T Y P E 속성은 테이블의 한 행을 나타내는 레코드 유형을 제공하며 테이블에서 선택하거나 또는 커서나 커서 변수에서 인출한 데이터행 전체를 저장할 수 있습니다.
행의 열과 레코드의 해당 필드는 동일한 이름과 데이터 유형을 가집니다.

다음은 d e p t _ r e c 레코드를 선언하는 예입니다. d e p t _ r e c 레코드의 필드는 d e p t 테이블의 열과 동일한 이름 및 데이터 유형을 가집니다.

DECLARE
dept_rec dept%ROWTYPE; -- declare record variable

필드를 참조하려면 다음 예와 같이 점 표기법을 사용합니다.

my_deptno := dept_rec.deptno;

사원의 이름, 급여, 고용일, 직책을 읽어 들이는 커서를 선언하려는 경우 다음과 같이
% R O W T Y P E을 사용하여 동일한 정보를 저장하는 레코드를 선언할 수 있습니다.

DECLARE
CURSOR c1 IS
SELECT ename, sal, hiredate, job FROM emp;
emp_rec c1%ROWTYPE; -- declare record variable that represents
-- a row fetched from the emp table

다음 명령문을 실행하면
FETCH c1 INTO emp_rec;
e m p _ r e c의 e n a m e 필드에 e m p 테이블의 e n a m e 열 값이 지정되고 s a l 필드에 s a l
열 값이 지정됩니다. 그림 1-3은 그 결과를 보여줍니다.
그림 1-3 %ROWTYPE 레코드

emp_rec.ename   
emp_rec.sal
emp_rec.hiredate
emp_rec.job

emp_rec
 JAMES
 950.00
 03-DEC-95
 CLERK