Symfoware Server SQLビギナーズガイド - FUJITSU - |
目次 索引 |
第2章 データを検索する方法 | > 2.1 列の値をそのまま取り出す |
これまでに説明した例では、取り出したデータがNULL値である場合のことは考えていませんでした。ここでは、NULL値を含むデータを取り出す方法について説明します。
SQL文中でホスト変数と対にして指定し、データの内容がNULL値かどうかを表すために使用する変数を、“標識変数”と呼びます。アプリケーションで参照するデータをデータベースから取り出す場合、標識変数には、取り出したデータがNULL値かどうかを表す情報が設定されます。逆に、アプリケーションで設定したデータをデータベースに格納する場合には、標識変数には、格納するデータがNULL値かどうかを表す情報を設定しておきます。標識変数は埋込みSQL宣言節で宣言します。宣言の記述方法はホスト変数と同じです。標識変数をSQL文中に指定する場合には、変数の前にコロン“:”を付けて指定します。ただし、SQL文以外のC言語およびCOBOLのステートメント中では、一般のC言語およびCOBOLの変数と同じで、コロン“:”は付けません。また、C言語では標識変数名に各国語文字を使用することはできません。なお、標識変数のデータ型はSMALLINTに対応するデータ型であることが必要です。各ホスト言語でのデータ型とSQLのデータ型との対応については、“SQLのデータ型と対応するホスト変数のデータ型”を参照してください。
標識変数を指定した例を以下に示します。
例
在庫表から、製品番号が“215”の製品の在庫数量と倉庫番号を求めます。
SELECT 在庫数量, 倉庫番号 INTO :STOCKQTY INDICATOR :STOCKQTY_INDICATOR, :WHCODE INDICATOR :WHCODE_INDICATOR FROM 在庫管理.在庫表 WHERE 製品番号 = 215
この例の単一行SELECT文では、“STOCKQTY_INDICATOR”および“WHCODE_INDICATOR”が標識変数です。それぞれがホスト変数“STOCKQTY”および“WHCODE”に対応します。標識変数は必要な変数にだけ指定することができます。例えば、倉庫番号にだけ標識変数を指定して、在庫数量には指定しなくてもかまいません。
取り出す列の値によって、標識変数に格納される値を以下に示します。なお、取り出す列の値の長さをL、受け取るホスト変数の長さをMとします。
取り出す列のデータ型 |
標識変数の値 |
||
---|---|---|---|
取り出す列の値が |
取り出す列の値がNULL値 |
||
M<Lの場合 |
M≧Lの場合 |
||
NUMERIC |
−1 |
0 |
0 |
CHARACTER(n) |
−1 |
n |
0 |
CHARACTER VARYING |
−1 |
データの有効な長さ |
0 |
備考. 列の値がNULL値の場合、データを格納するホスト変数の内容は不定になります。
標識変数を指定しないで、取り出すデータがNULL値になると、単一行SELECT文はエラーになります。列の値にNULL値が含まれるかどうかが分からない場合には、必ず標識変数を指定してください。
目次 索引 |