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;
/