宣言部と変数の定義 「%TYPE」「%ROWTYPE」:超入門「PL/SQL」(3)(2/3 ページ)
本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。今回は、「%TYPEおよび%ROWTYPE属性の変数を定義する記述方法」を解説します。
「%TYPE」属性
「%TYPE」属性は、特定の表の列、または、事前に定義されている変数のデータ型およびサイズを参照します。通常の変数と同様に、代入演算子(:=)または「DEFAULTキーワード」による初期値や「NOT NULL制約」の指定も可能です。
変数を定義する書式は以下の通りです。
<変数名> <表名>.<列名>%TYPE;
サンプルプログラムは以下の通りです。
DECLARE e_deptno dept.deptno%TYPE := 50; v_deptno e_deptno%TYPE; BEGIN NULL; END; /
このサンプルプログラムでは、変数「e_deptno」を「dept.deptno%TYPE」と定義し、“DEPT”表の“DEPTNO”列のデータ型を参照しています。さらに代入演算子「:=」によって初期値「50」を代入しています。
続く変数「v_deptno」は「e_deptno%TYPE」と定義しています。つまり、変数「e_deptno」と同じデータ型を参照しています。
「%ROWTYPE」属性
「%ROWTYPE」属性は、「表(またはビュー)の行構造」を参照します。行全体のデータを扱う場合は、「%TYPE」属性で1列ずつ変数を定義するよりも効率的です。
ただし「%ROWTYPE」属性は、「%TYPE」属性とは異なり、「初期値」や「NOT NULL制約」は指定できません。
変数を定義する書式は以下の通りです。
<変数名> <表名>%ROWTYPE;
サンプルプログラムは以下の通りです。
DECLARE d_row dept%ROWTYPE; BEGIN NULL; END; /
このサンプルプログラムでは、変数「d_row」を「dept%ROWTYPE」とし、“DEPT”表の「行の構造」を参照しています。
「%ROWTYPE」属性で定義した変数は、次の特徴があります。
- 行構造と同じ数の領域(フィールド)が確保される
- 各フィールドの名前やデータ型は、参照する列の名前とデータ型をそのまま踏襲する
「%ROWTYPE」属性で定義した変数は、以下のような構造になっています(図2)。
サンプルプログラムの変数「d_row」は、参照している“DEPT”表と同様に3つのフィールドで構成されています。各フィールドの名前「DEPTNO」「DNAME」「LOC」やデータ型「NUMBER(2)」「VARCHAR2(14)」「VARCHAR2(13)」もDEPT表と同じになります。
ちなみに値の参照や代入などで各フィールドにアクセスしたい場合には、「<変数名>.<フィールド名>」の書式で指定します。サンプルプログラムは以下の通りです。
DECLARE d_row dept%ROWTYPE; BEGIN d_row.deptno := 10; /* 変数d_rowのDEPTNOフィールドに10を代入 */ DBMS_OUTPUT.PUT_LINE(d_row.deptno); /* 変数d_rowのDEPTNOフィールドに代入されている値を表示 */ END; /
このサンプルプログラムで「%ROWTYPE」属性で定義した変数は、本来はカーソルなどを使って表から取り出したデータを処理するような場合に使います。こちらの詳細は今後の連載で解説する予定です。
定義時の注意点
変数の定義においては、「%TYPE」「%ROWTYPE」属性を指定して別の変数のデータ型を参照することもできます。ただしPL/SQLでは、ソースコードの上から順にプログラムを処理していく仕様のため、「前方参照(ソースコードの現在地よりも後方に定義されているものを参照すること)」はできないことに注意しましょう。
例えば以下の記述では、変数「v_deptno」のデータ型が変数「e_deptno」を参照するように書かれています。しかしこの時点では変数「e_deptno」はまだ定義されていません。従って、エラーとなってしまいます。
DECLARE v_deptno e_deptno%TYPE; e_deptno dept.deptno%TYPE := 50; :
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- DBエンジンを最大限に生かすバッチアプリの作り方
第1回では、バッチアプリケーションを設計するうえで考慮すべき4つのポイントについて解説しました。今回は、Oracleデータベースを最大限に利用したバッチアプリケーションの実装テクニックについて解説します。 - ODTを使ったVisual StudioからのPL/SQL開発
オラクル社が提供する3つの.NET環境用開発ツール「ODP.NET」「ODT」「ODE.NET」。Oracle 10gリリース2に対応した最新版を使って、Oracleデータベースを前提とした.NETアプリケーションの開発手法を解説する。(編集部) - 更新/挿入/削除のSQLを高速化する3つの技とは?
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局) - 【Oracle Database】忘れていませんか? 「アラートログ調査」に必要な、たった3つのキホン
データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は基本編として「アラートログの調査で押さえるべき3つのポイント」を解説します。【Oracle Database 12c対応版】