SQL 標準言語

Db2 SQL と SQL 標準は同一ではありません。 STDSQL SQL 処理オプションは、いくつかの相違点に対処します。

  • STDSQL(NO) は、SQL 標準への準拠を意図していないことを示します。 インストール・パネル DSNTIP4 の フィールド STD SQL LANGUAGE の値によって、 デフォルトが与えられます (デフォルトは NO)。
  • STDSQL(YES)1は、SQL標準への準拠が意図されていることを示します。

プログラムを STDSQL(YES) オプションを指定してプリコンパイル する場合には、以下の規則が適用されます。

ホスト変数の宣言: Java™ および REXX を除くすべてのホスト変数宣言は、BEGIN DECLARE SECTION ステートメントと END DECLARE SECTION ステートメントのペアの間に配置する必要があります。
  BEGIN DECLARE SECTION
   -- one or more host variable declarations
  END DECLARE SECTION

この 2 つのステートメントが一組になって、それぞれ別個に ひとかたまりのホスト変数宣言を囲むことができます。

SQLCODE と SQLSTATE の宣言: プログラマーは 、SQLCODE か SQLSTATE のいずれか (または その両方) のホスト変数を宣言しなければなりません。 SQLCODE は フルワード整数として、SQLSTATE は 5 バイトの文字ストリングとして 定義しなければなりません。 SQLCODE および SQLSTATE をなんらかの構造の一部とすることはできません。 変数は、プログラムの DECLARE SECTION で宣言されなければ なりませんが、SQLSTATE にホスト変数が定義されていなけれ ば、SQLCODE は DECLARE SECTION の外側で宣言することができます。 PL/I で受け入れ可能な宣言は次のようになります。
  DECLARE SQLCODE BIN FIXED(31);
  DECLARE SQLSTATE CHAR(5);
Fortran プログラムでは、変数 SQLCODE の代わりに SQLCOD を使用しなければなりません。SQLSTATE については、SQLSTATE または SQLSTA のいずれかを使用することができます。

SQLCA の定義: SQLCA を 、(手作業でその定義をコーディングしたり、INCLUDE SQLCA ステートメントを使用 して) ユーザー・プログラム内に定義してはなりません。 STDSQL(YES) を指定すると、Db2プリコンパイラーまたはコプロセッサーは、SQLCODE の代わりに変数名 SQLCADE を、SQLSTATE の代わりに SQLSTAT を含む SQLCA を自動的に生成します。 各 SQL ステートメントの実行後、Db2は、以下のように SQLCODE および SQLSTATE に状況情報を割り当てます。その宣言については、上記で説明します。

  • SQLCODE: Db2は、SQLCADE の値を SQLCODE に割り当てます。 Fortran では 、SQLCADE と SQLCODE の代わりに、それぞれ SQLCAD と SQLCOD が使用されます。
  • SQLSTATE: Db2 は、SQLSTAT の値を SQLSTATE に割り当てます。 (Fortran では 、SQLSTAT と SQLSTATE の代わりに、それぞれ SQLSTT と SQLSTA が使用されます。)
  • SQLSTATE または SQLCODE のいずれの宣言もない: Db2は、SQLCADE の値を SQLCODE に割り当てます。

プリコンパイラーまたはコプロセッサーが INCLUDE SQLCA ステートメントを 検出すると、そのステートメントは無視されて警告メッセージが 出されます。 ただし、ハンド・コーディングされた定義は、プリコンパイラーでもコプロセッサーでも認識されません。したがって、ハンド・コーディングされた定義は、コンパイル時に、生成された定義との間で矛盾を発生させます。 Db2 プリコンパイラまたはコプロセッサによって生成されたもの以外のSQLCADEまたはSQLSTATの定義がプログラムに現れた場合にも、同様の問題が生じます。

1 STDSQL(86) は同義語ですが、STDSQL(YES) を使用すべきです。