COBOL とは異なり、SQL では NULL 値を格納できる変数をサポートしています。NULL 値はエントリが存在しないことを意味し、通常は値が不明または未定義です。NULL 値を使用することにより、数字列のゼロや文字列の空白文字などの意図的なエントリを、不明なエントリや適用不能なエントリと区別できます。たとえば、価格列から取り込んだ値が NULL の場合でも、対応する品目は無料ではありません。価格は無効または未設定です。
データがデータベースからホスト変数に取り込まれたときに、切り捨てが実行される場合は、インジケーター変数を別の用途で使用できます。ホスト変数がデータベースから返されるデータを保持できるほど大きくない場合には、SQLCA データ構造体に警告フラグ (sqlwarn1) が設定され、インジケーター変数がデータベース内のデータのサイズに設定されます。
この例は、INTO... FETCH 文で使用されるインジケーター変数の宣言を示しています。
EXEC SQL BEGIN DECLARE SECTION END-EXEC 01 host-var pic x(4). 01 indicator-var pic S9(4) comp-5. EXEC SQL END DECLARE SECTION END-EXEC . . . EXEC SQL FETCH myCursor INTO :host-var:indicator-var END-EXEC
次の例は、saleprice ホスト変数とコンパニオン インジケーター変数 saleprice-null を使用する UPDATE 文を示しています。
EXEC SQL UPDATE closeoutsale SET temp_price = :saleprice:saleprice-null, listprice = :oldprice END-EXEC
この例では、saleprice-null の値が -1 の場合に UPDATE 文が実行されると、文は次のように読み取られます。
EXEC SQL UPDATE closeoutsale SET temp_price = null, listprice = :oldprice END-EXEC
この例は、is null 構造体を使用した検索を示しています。
if saleprice-null equal -1 EXEC SQL DELETE FROM closeoutsale WHERE temp_price is null END-EXEC else EXEC SQL DELETE FROM closeoutsale WHERE temp_price = :saleprice END-EXEC end-if