Symfoware Server SQLビギナーズガイド - FUJITSU -
目次 索引 前ページ次ページ

第2章 データを検索する方法> 2.1 列の値をそのまま取り出す

2.1.2 NULL値を含むデータを取り出す

これまでに説明した例では、取り出したデータが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値の場合

取り出す列の値がNULL値
以外の場合

M<Lの場合

M≧Lの場合

NUMERIC
DECIMAL
INTEGER
SMALLINT
FLOAT
REAL
DOUBLE
PRECISION
DATE
TIME
TIMESTAMP
INTERVAL
BLOB

-1

0

0

CHARACTER(n)
NATIONAL CHARACTER(n)

-1

n

0

CHARACTER VARYING
NATIONAL CHARACTER VARYING

-1

データの有効な長さ

0

備考. 列の値がNULL値の場合、データを格納するホスト変数の内容は不定になります。

標識変数を指定しないで、取り出すデータがNULL値になると、単一行SELECT文はエラーになります。列の値にNULL値が含まれるかどうかが分からない場合には、必ず標識変数を指定してください。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2007