Oracle PL/SQLで列のデータ型を自動取得する%TYPE属性とは?使い方とメリットを解説

Oracle

Oracle PL/SQLでプログラムを作成していると、テーブルの列と同じデータ型の変数を宣言したい場面があります。しかし、VARCHAR2の長さやNUMBERの桁数などを手動で指定すると、後からテーブル定義が変更された際に不具合の原因になることがあります。

このような場合に便利なのが、参照するテーブル列のデータ型を自動的に利用できるPL/SQLの属性です。データベースの定義変更に強いコードを書くためにも、ぜひ覚えておきたい機能です。

この記事では、Oracle PL/SQLでテーブルの特定列と同じデータ型を変数へ適用する方法や、%TYPE属性の使い方、利用するメリットについて詳しく解説します。

Oracle PL/SQLで列と同じデータ型を指定する%TYPE属性

Oracle PL/SQLでは、データベースの列と同じデータ型を変数や定数に設定するために%TYPE属性を使用します。

%TYPEを利用すると、指定したテーブル列のデータ型やサイズをPL/SQL側で自動的に引き継ぐことができます。

例えば、社員情報を管理するEMP表にENAMEというVARCHAR2型の列がある場合、以下のように宣言できます。

DECLARE
v_name emp.ename%TYPE;
BEGIN
NULL;
END;
/

この場合、v_nameはEMP表のENAME列と同じデータ型になります。ENAME列がVARCHAR2(20)で定義されていれば、その型情報を利用して変数が作成されます。

%TYPE属性を使うメリット

%TYPE属性を使う最大のメリットは、データベース側の変更に強いPL/SQLプログラムを作成できることです。

例えば、テーブル定義が以下のように変更された場合を考えます。

変更前 変更後
VARCHAR2(20) VARCHAR2(50)

通常の変数宣言では、プログラム側もVARCHAR2(50)へ修正する必要があります。しかし、%TYPEを利用していれば、参照元の列定義が変更されることで自動的に対応できます。

業務システムではデータ項目の仕様変更が発生することも多いため、%TYPEを利用することで修正漏れによるエラーを防ぎやすくなります。

%TYPE属性の基本的な書き方

%TYPE属性の基本構文は以下の形式です。

変数名 テーブル名.列名%TYPE;

具体例として、CUSTOMERSテーブルのCUSTOMER_ID列と同じ型の変数を作成する場合は、次のように記述します。

DECLARE
v_customer_id customers.customer_id%TYPE;
BEGIN
NULL;
END;
/

また、カーソルやレコード型の中でも%TYPEを利用できます。特定の列だけを扱いたい場合に便利な指定方法です。

%TYPEと通常のデータ型指定の違い

PL/SQLでは、以下のように直接データ型を指定して変数を宣言することも可能です。

DECLARE
v_name VARCHAR2(20);
BEGIN
NULL;
END;
/

しかし、この方法ではテーブル側の定義変更に合わせて、PL/SQLコードも修正する必要があります。

宣言方法 特徴
VARCHAR2(20)などで指定 固定的な型指定。変更時は修正が必要
%TYPEを使用 列定義を参照するため変更に強い

特に長期間運用される業務システムでは、保守性を高めるために%TYPEを利用するケースが多くあります。

%ROWTYPEとの違いも理解しておく

Oracle PL/SQLには、%TYPEと似た属性として%ROWTYPEがあります。

%TYPEは1つの列のデータ型を取得するために使用します。一方、%ROWTYPEはテーブルやカーソルの1行分のデータ構造をまとめて取得するために使用します。

属性 用途
%TYPE 特定の列と同じデータ型の変数を作成する
%ROWTYPE テーブル1行分のレコード型を作成する

例えば、社員番号だけを取得したい場合は%TYPEを使用し、社員テーブルの複数項目をまとめて扱いたい場合は%ROWTYPEが適しています。

実務で%TYPEを使う場面

%TYPE属性は、ストアドプロシージャやファンクション、トリガーなど、データベース内で動作するPL/SQLプログラムでよく利用されます。

例えば、顧客情報を登録する処理で、顧客名や電話番号などを受け取る変数を宣言する場合、テーブル列と同じ型を利用することでデータ不整合を防げます。

また、複数の開発者が関わる大規模システムでは、テーブル定義とプログラムの型を連動させることで、保守作業の負担を減らすことができます。

まとめ

Oracle PL/SQLで参照するテーブルの特定列と同じデータ型を動的に利用する場合は、%TYPE属性を使用します。

%TYPEを使うことで、テーブル列のデータ型やサイズ変更に柔軟に対応でき、PL/SQLプログラムの保守性を高めることができます。

また、複数列をまとめて扱う場合は%ROWTYPEを利用するなど、それぞれの用途を理解して使い分けることが、読みやすく安全なOracle PL/SQLコードを書くポイントです。

コメント

タイトルとURLをコピーしました