プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

PL/SQL 「%TYPE属性」と「%ROWTYPE属性」

■PL/SQLの「%TYPE属性」と「%ROWTYPE属性」について解説する
・「%TYPE属性」や「%ROWTYPE属性」は直接データの型を指定せず、Oracleの列のデータ型や定義済みの変数のデータ型を参照するので非常に便利
 
 
①「%TYPE属性」は特定のテーブルのカラム、または定義済みの変数のデータ型とサイズを参照する
 
基本構文


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

 
「%TYPE属性」の活用例
TESTテーブルに「NAME」というカラムが「VARCHAR2型」で定義されていたとする


SQL> DESC TEST
 名前            型
 -------------   ----------
 NAME            VARCHAR2(20)

 
変数「var」を「%TYPE属性」で宣言し、出力する


DECLARE
  -- 変数「var」を「%TYPE属性」で宣言 ⇒ TESTテーブルのNAMEカラムのデータ型(STRING型)で宣言
  var TEST.NAME%TYPE;

BEGIN
  -- 変数「var」にTESTテーブルの「ID:1」の「NAME」を格納
  SELECT NAME INTO var FROM TEST WHERE ID = 1;
  -- ※「SELECT INTO文」のSELECT結果は1レコードにすること
  
  -- 出力
  DBMS_OUTPUT.PUT_LINE(var);

END;
/

 
 
②「%ROWTYPE属性」はテーブルの行構造を参照する
 
基本構文


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

 
「%ROWTYPE属性」の活用例
TESTテーブルに「ID」というカラムが「NUMBER型」、「NAME」というカラムが「VARCHAR2型」で定義されていたとする


SQL> DESC TEST
 名前            型
 -------------   ----------
 ID              NUMBER(38)
 NAME            VARCHAR2(20)

 
変数「var_row」を「%ROWTYPE属性」で宣言し、出力する


DECLARE
  var_row TEST%ROWTYPE;

BEGIN
  
  SELECT * INTO var_row FROM TEST WHERE ID = 1;
  -- ※「SELECT INTO文」のSELECT結果は1レコードにすること
  
  DBMS_OUTPUT.PUT_LINE(var_row.ID || ' ' || var_row.NAME);

END;
/