本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。今回は、「%TYPEおよび%ROWTYPE属性の変数を定義する記述方法」を解説します。
本連載は、Oracle Database向けにデータベース言語 SQL(Structured Query Language)を拡張したプログラミング言語である「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。SQLは知っているけれど、OracleでのPL/SQLは初めてという人向けに、機能の概要と具体的な書き方を解説していきます。
今回は、「%TYPE」「%ROWTYPE」属性を使用した変数の定義方法を解説します。
「%TYPE」「%ROWTYPE」属性では、表の列や行、または既に宣言された変数のデータ型を参照する「変数」を定義できます。
PL/SQLでは、Oracle Database内の表から取り出したデータを「変数に代入」して処理することがよくあります。このような場合には、変数のデータ型を直接指定するのではなく、「%TYPE」や「%ROWTYPE」属性を使うと効率が上がります。例えば以下のような記述になります。
DECLARE e_deptno dept.deptno%TYPE; BEGIN NULL; END; /
このサンプルプログラムでは、変数「e_deptno」を「dept.deptno%TYPE」で定義したものです。これで、「“DEPT”表の“DEPTNO”列のデータ型を参照する」という記述になります。
「%TYPE」「%ROWTYPE」属性を使う利点は次の通りです。
もう少し具体的な例で考えてみましょう。
“DEPT”表の“DEPTNO”列が「NUMBER型」で、その最大サイズが「2」だとします。この列のデータを格納する変数を「直接データ型で定義する」場合には、列の定義に合わせて「NUMBER(2)」と指定します。
しかしその後、DEPT表のDEPTNO列の最大サイズが「4」に拡大されたとしたらどうすれば良いのでしょう。直接定義している場合には、「関係する変数の定義」も同時に変更しなければエラーが発生する可能性があります(図1)。
この課題は、データ型に「%TYPE」「%ROWTYPE」属性を定義することで回避できます。「%TYPE」「%ROWTYPE」属性は列のデータ型や、既に定義されている変数のデータ型を参照すると前述しました。ですから、対応する列定義の変更に合わせて変数のデータ型も自動的に変更されるのです。「プログラムの修正が必要ない」のはこのためです。
また、列定義を参照することから、列の正確なデータ型や最大サイズを知らないとしても変数を簡単に定義できます。
続いて、各属性の書式を確認しましょう。
Copyright © ITmedia, Inc. All Rights Reserved.