宣言部と変数の定義 「%TYPE」「%ROWTYPE」超入門「PL/SQL」(3)(1/3 ページ)

本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。今回は、「%TYPEおよび%ROWTYPE属性の変数を定義する記述方法」を解説します。

» 2017年07月06日 05時00分 公開
[小笠原宏幸株式会社アシスト]

連載バックナンバー

 本連載は、Oracle Database向けにデータベース言語 SQL(Structured Query Language)を拡張したプログラミング言語である「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。SQLは知っているけれど、OracleでのPL/SQLは初めてという人向けに、機能の概要と具体的な書き方を解説していきます。

 今回は、「%TYPE」「%ROWTYPE」属性を使用した変数の定義方法を解説します。

「%TYPE」「%ROWTYPE」属性とは何か

 「%TYPE」「%ROWTYPE」属性では、表の列や行、または既に宣言された変数のデータ型を参照する「変数」を定義できます。

 PL/SQLでは、Oracle Database内の表から取り出したデータを「変数に代入」して処理することがよくあります。このような場合には、変数のデータ型を直接指定するのではなく、「%TYPE」や「%ROWTYPE」属性を使うと効率が上がります。例えば以下のような記述になります。

DECLARE
  e_deptno  dept.deptno%TYPE;       
BEGIN
  NULL;
END;
/
%TYPE属性で定義した変数のサンプルプログラム

 このサンプルプログラムでは、変数「e_deptno」を「dept.deptno%TYPE」で定義したものです。これで、「“DEPT”表の“DEPTNO”列のデータ型を参照する」という記述になります。

 「%TYPE」「%ROWTYPE」属性を使う利点は次の通りです。

  1. 列の定義が変更になってもプログラムの修正が必要ない
  2. 列の正確な定義が分からなくても変数を定義できる

 もう少し具体的な例で考えてみましょう。

 “DEPT”表の“DEPTNO”列が「NUMBER型」で、その最大サイズが「2」だとします。この列のデータを格納する変数を「直接データ型で定義する」場合には、列の定義に合わせて「NUMBER(2)」と指定します。

 しかしその後、DEPT表のDEPTNO列の最大サイズが「4」に拡大されたとしたらどうすれば良いのでしょう。直接定義している場合には、「関係する変数の定義」も同時に変更しなければエラーが発生する可能性があります(図1)。

photo 図1 変数のデータ型を直接指定して記述した場合の課題

 この課題は、データ型に「%TYPE」「%ROWTYPE」属性を定義することで回避できます。「%TYPE」「%ROWTYPE」属性は列のデータ型や、既に定義されている変数のデータ型を参照すると前述しました。ですから、対応する列定義の変更に合わせて変数のデータ型も自動的に変更されるのです。「プログラムの修正が必要ない」のはこのためです。

 また、列定義を参照することから、列の正確なデータ型や最大サイズを知らないとしても変数を簡単に定義できます。

 続いて、各属性の書式を確認しましょう。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。