レコード・タイプ宣言内の %ROWTYPE 属性 (PL/SQL)
%ROWTYPE 属性は、表またはビューの各列に対応したフィールドで構成されるタイプ・レコードの PL/SQL 変数を宣言するときに使用します。この属性は、 データ・サーバーでサポートされます。PL/SQL レコード内の各フィールドには、表内の対応する列のデータ・タイプが付与されます。
レコード とは、複数のフィールドからなる、名前が付いた順序付きコレクションのことです。 フィールド は変数に似ていて、ID およびデータ・タイプがありますが、レコードにも属しており、レコード名を修飾子にしてドット表記の使用により参照する必要があります。
構文
説明
- record
- レコードの識別子を指定します。
- table
- レコード内のフィールドを定義するために使用する列定義を持つ表の識別子を指定します。
- view
- レコード内のフィールドを定義するために使用する列定義を持つビューの識別子を指定します。
- %ROWTYPE
- レコード・フィールドのデータ・タイプを、指定した表またはビューに関連付けられた列のデータ・タイプから取得することを指定します。 レコード・フィールドは、その他の列属性 (NULL 可能属性など) を継承しません。
例
以下の例では、EMP 表の列の変数を個別に宣言する代わりに、%ROWTYPE 属性を使用してレコード (r_emp と命名) を作成する方法を示します。
CREATE OR REPLACE PROCEDURE emp_sal_query (
p_empno IN emp.empno%TYPE
)
IS
r_emp emp%ROWTYPE;
v_avgsal emp.sal%TYPE;
BEGIN
SELECT ename, job, hiredate, sal, deptno
INTO r_emp.ename, r_emp.job, r_emp.hiredate, r_emp.sal, r_emp.deptno
FROM emp WHERE empno = p_empno;
DBMS_OUTPUT.PUT_LINE('Employee # : ' || p_empno);
DBMS_OUTPUT.PUT_LINE('Name : ' || r_emp.ename);
DBMS_OUTPUT.PUT_LINE('Job : ' || r_emp.job);
DBMS_OUTPUT.PUT_LINE('Hire Date : ' || r_emp.hiredate);
DBMS_OUTPUT.PUT_LINE('Salary : ' || r_emp.sal);
DBMS_OUTPUT.PUT_LINE('Dept # : ' || r_emp.deptno);
SELECT AVG(sal) INTO v_avgsal
FROM emp WHERE deptno = r_emp.deptno;
IF r_emp.sal > v_avgsal THEN
DBMS_OUTPUT.PUT_LINE('Employee''s salary is more than the department '
|| 'average of ' || v_avgsal);
ELSE
DBMS_OUTPUT.PUT_LINE('Employee''s salary does not exceed the department '
|| 'average of ' || v_avgsal);
END IF;
END;