e-learning、オラクル研修、LMS(学習管理システム)のiStudy

e-learning、オラクル研修、LMS(学習管理システム)のiStudy

第4回 「変数について(その2)」

2011.12.05

前回に引き続き、変数の説明です。

前回、変数の宣言方法について解説しました。以下の通りです。

<宣言部で>
   変数名 データ型;

では、それ以外の変数宣言の方法でよく使われているものをご紹介します。
以下のような宣言方法です。

<宣言部で>
   変数名  表名.列名%TYPE;

この方法は、「指定した表(またはビュー)の指定した列と同じデータ型である」とういう変数宣言です。いわばデータ型を直接指定しているのではなく間接的に指定しているわけです。たとえば、EMP表のENAME列と同じデータ型である変数をV_ENAMEという名前で宣言する場合、以下のような宣言になります。

<宣言部で>
  V_ENAME   EMP.ENAME%TYPE;

このような方法で変数を宣言すると、第三者でもその記述を見たときに変数の意味がよくわかります。また、表の列のデータ型が変更された場合でも、ソースコードの修正が不要である可能性が高いので、可能であればこの方法で宣言することをお勧めします。

変数を宣言した直後、その変数の値は何もありません。いわば空っぽの箱です。このように値がないことをNULLといいます。プログラム言語によっては宣言直後の変数の値は「不定」ということもありますが、PL/SQL言語の場合は明確に「NULL」と定められています。しかし、値が格納された状態で変数を宣言することもできます。例えば、値5 を格納したNUMBER型の変数をTAX_RATE という名前で宣言する場合は以下のようにします。

<宣言部で>
   TAX_RATE   NUMBER := 5;

ここで、TAX_RATEという変数は最初から値が入っているという点を除けば普通の変数とまったく同じです。もちろん、実行部でこのTAX_RATE変数に、違う値を格納(代入)することもできます。もし実行部でTAX_RATEへの値の代入を禁じたい場合は CONSTANTキーワードを使って以下のように宣言します。

<宣言部で>
   TAX_RATE  CONSTANT  NUMBER := 5;

CONSTANTキーワードを使って変数を宣言すると、実行部でその変数に値の代入はできません。つまり、上記の例ではTAX_RATE変数の値は常に5であることが保証できます。このように、値の代入が禁止された変数のことを「定数」といいます。簡単な定数の使用例を紹介します。
例えば、このTAX_RATE定数が、消費税率 5% を表しているとします。そして、実行部で消費税率 5% を使ったさまざまな計算をしている時、実行部のソースコードの中に「5」とうい数字を直接書くよりも、TAX_RATE定数で書いたほうが望ましいのです。なぜなら、将来、消費税率が変更され、3%になったときに、宣言部のTAX_RATE定数の値を「3」にするだけで、実行部のソースコードは修正する必要はないからです。これは定数の典型的な使用例です。

では、変数であれば実行部で値の代入ができるわけですが、最後にその代入方法を説明します。代入とは変数という値の入れ物(箱とでも思ってください)に値を入れることです。

変数に値を代入する方法としては2種類あります。「:=」を使う方法と「INTO」を使う方法です。「INTO」を使う方法はデータベースから問い合わせた値を変数に代入する方法であり、そのための特別な文の一部として使用します。これについては重要な技術ですが説明が多くなるので、別の機会に説明します。

では、「:=」を用いる方法ですが、これは大変簡単です。以下の通りです。

<実行部で>
     変数名 := 値;

これにより、:=の右側(右辺といいます)の値を左側(左辺といいます)の変数に代入します。とてもシンプルですね。気をつけていただきたいのは、「:=」であり、「=」ではないということです。PL/SQLでは、「=」は比較するという意味であり、代入ではありません。代入は「:=」です。「比較」と「代入」はプログラム言語によりそれぞれ微妙に違うので要注意です。また、右辺は値そのものでなくても大丈夫です。式でもよいし、変数でも関数でもかまいません。簡単な例を示します。例えば、変数A, 変数BがともにNUMBER型だとして、以下のような記述があるとします。

<実行部で>
1   A := 10;
2   A := A + 1;
3   B := A;
4   A := A + 1;
※左に付した数字は説明のための便宜的な行番号です。

プログラム言語によっては、変数に格納されているのは値そのものではなく、実は値のポインタ(場所の情報)であるという言語もあります。そういった言語では変数をただの値の箱と考えていると、場合によっては大きな間違いをする可能性があります。
しかしPL/SQL言語では変数を単なる値の箱と考えていいので、大変わかりやすいのです。
1行目は単に変数Aに10という値を代入しています。シンプルですね。
2行目は変数Aの値に1を足した値(すなわち、11)を変数Aに代入しています。これにより変数Aの値は11になります。いわば同じ変数の値を計算して同じ変数に戻しているわけです。
3行目は変数Aの値(この時点で、11)を変数Bに代入しています。これにより変数Bの値は変数Aと同じ11になります。いわば変数Aの値を変数Bにコピーしたわけです。
4行目で変数Aに1加算して変数Aの値は12になりますが、変数Bの値には影響はなく、変数Bは11のままです。当たり前ですね。変数という箱の中に値そのものが入るのです。

それでは今回はここまでにしたいと思います。

次回(第5回)も変数の説明ですがレコード、コレクションといった特殊なデータ型の変数宣言の仕方を説明します。

次々回以降は7回目までは、以下のように考えてます。
6回目   データベースからの問い合わせ(1行のパターン)
7回目  データベースからの問い合わせ(複数行のパターン)

先頭へ戻る