SQL での NULL を同じ名前の C 言語の定数と混同しないでください。SQL 言語では、NULL は属性が不明であるか情報が適切でないかのいずれかを表します。C 言語の定数は、ポイント先がメモリのロケーションではないポインタ値を表します。
SQL Anywhere のマニュアルで使用されている NULL の場合は、上記のような SQL データベースを指します。C 言語の定数を指す場合は、null ポインタ (小文字) のように表記されます。
NULL は、カラムに定義されるどのデータ型の値とも同じではありません。NULL 値をデータベースに渡したり、結果に NULL を受取ったりするためには、通常のホスト変数の他に何か特別なものが必要です。このために使用されるのが、インジケータ変数です。
INSERT 文は、次のようにインジケータ変数を含むことができます。
EXEC SQL BEGIN DECLARE SECTION; short int employee_number; char employee_name[50]; char employee_initials[6]; char employee_phone[15]; short int ind_phone; EXEC SQL END DECLARE SECTION; /* set values of empnum, empname, initials, and homephone */ if( /* phone number is known */ ) { ind_phone = 0; } else { ind_phone = -1; /* NULL */ } EXEC SQL INSERT INTO Employee VALUES (:employee_number, :employee_name, :employee_initials, :employee_phone:ind_phone ); |
インジケータ変数の値が -1 の場合は、NULL が書き込まれます。値が 0 の場合は、employee_phone の実際の値が書き込まれます。
インジケータ変数は、データをデータベースから受け取るときにも使用されます。この場合は、NULL 値がフェッチされた (インジケータが負) ことを示すために使用されます。NULL 値がデータベースからフェッチされたときにインジケータ変数が渡されない場合は、SQLE_NO_INDICATOR エラーが発生します。
SQLCA 構造体で返されるエラーと警告の詳細については、SQLCA (SQL Communications Area) の初期化を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |