DB2 SQL 通信領域の定義

SQL 文が含まれる Open PL/I プログラムは、SQL 通信領域 (SQL Communications Area; SQLCA) をインクルードする必要があります。次の例に示すように、SQLCA は、SQLCODE 変数と SQLSTATE 変数をインクルードします。

SQLCODE 値は、各 SQL 文の実行後に、データベース マネージャーによって設定されます。アプリケーションで SQLCODE 値をチェックすることで、最後の SQL 文が正常に実行されたかを確認できます。

SQL 文の結果を分析する際、SQLCODE 変数の代わりに SQLSTATE 変数を使用することができます。SQLCODE 変数と同様に、SQLSTATE 変数も、各 SQL 文の実行後にデータベース マネージャーによって設定されます。

SQLCA は、次のように SQL INCLUDE 文を使用してインクルードします。

exec sql include sqlca;

SQLCA は、SQL 宣言セクション内で定義してはいけません。SQLCODE および SQLSTATE 宣言の範囲には、プログラム内のすべての SQL 文の範囲がインクルードされている必要があります。

/*--------------------------------------------------------------- */
/* DB2 SQL Communications Area                                    */ 
/* This should be included by the                                 */ 
/* 'EXEC SQL INCLUDE SQLCA;' statement.                           */ 
/* Do not place this within a SQL declare statement.              */
/*--------------------------------------------------------------- */ 
declare 1 sqlca,                              
  2 sqlcaid char(8),                 /* Eyecatcher = 'SQLA '      */
  2 sqlcabc fixed bin(31),           /* SQLCA size in bytes = 136 */                           
       2 sqlcode fixed bin(31),      /* SQL return code           */
       2 sqlerrm char(70) varying,   /* Error message tokens      */                            
       2 sqlerrp char (8),           /* Diagnostic information    */
       2 sqlerrd(1:6) fixed bin(31), /* Diagnostic information    */
       2 sqlwarn,                    /* Warning flags             */
         3 sqlwarn0 char(1),
         3 sqlwarnl char(1),
         3 sqlwarn2 char(1),
         3 sqlwarn3 char(1),
         3 sqlwarn5 char(1),
         3 sqlwarn6 char(1),
         3 sqlwarn7 char(1),
       2 sqltext,
         3 sqlwarn8 char(1),
         3 sqlwarn9 char(1),
         3 sqlwarna char(1),
         3 sqlstate char(5); /* State corresponding to SQLCODE */

/*    End of SQL Communications Area declaration */