%TYPE属性と%ROWTYPE属性の違い

この記事では%TYPE属性と%ROWTYPE属性の違いについて解説します。

 %TYPE属性と%ROWTYPE属性とは

%TYPE属性と%ROWTYPE属性はPL/SQLにおいて、変数のデータ型を定義するための属性です。

通常は変数に対して特定のデータ型を定義します。

しかし、この2つの属性は表の列や行のデータ型を参照し定義することができます。

この属性を使用しておけば、列の定義が変更になってもプログラムを修正する必要がないというメリットがあります。


 %TYPE属性

%TYPE属性は表の列のデータ型を参照し、変数のデータ型を定義します。

定義式は以下のようになります。

<変数名> <テーブル名>.<カラム名>%TYPE;

例えば「emp」表の列「empno」のデータ型を変数「no」に定義する場合は以下のようになります。

no emp.empno%TYPE;


 %ROWTYPE属性

%ROWTYPE属性は表の行構造を参照します。

行全体のデータを扱いたい場合にまとめて定義することができます。

定義式は以下のようになります。

<変数名> <テーブル名>%ROWTYPE;

定義した変数から特定の列の値を参照する場合は「変数名.カラム名」とすることで行えます。

変数「emp_rec」に対して「emp」表の行構造を定義し、「emp」表から「empno」が1のレコードの「ename」を出力する場合は以下のようなPL/SQLになります。

DECLARE
  emp_rec emp%ROWTYPE;

BEGIN
  SELECT * INTO emp_rec FROM emp WHERE empno = 1;
  DBMS_OUTPUT.PUT_LINE(emp_rec.ename);
END;
/