Rational Developer for System z
PL/I for Windows, Version 8.0, プログラミング・ガイド

PL/I アプリケーション内での SQL ステートメントのコーディング

PL/I アプリケーションでの SQL ステートメントは、「SQL Reference, Volume 1 and Volume 2」(SBOF-8923) に定義されている言語を使用してコーディングできます。 SQL コード特有の要件について、以下に説明します。

SQL 連絡域の定義

SQL ステートメントを含む PL/I プログラムには、連絡域 (SQLCA) を組み込む必要があります。 図 1に示すように、SQLCA の一部は、SQLCODE 変数と SQLSTATE 変数から構成されています。

SQLCA をインクルードするには、次のように SQL INCLUDE ステートメントを 使用する必要があります。

  exec sql include sqlca;

SQLCA 構造体は、SQL 宣言セクション内で定義してはなりません。 SQLCODE と SQLSTATE の宣言の有効範囲には、プログラム内の SQL ステートメントの有効範囲がすべて含まれている必要があります。

図 1. SQLCA の PL/I 宣言
  Dcl
    1 Sqlca,
      2 sqlcaid     char(8),           /* Eyecatcher = 'SQLCA   '*/
      2 sqlcabc     fixed binary(31),  /* SQLCA size in bytes = 136 */
      2 sqlcode     fixed binary(31),  /* SQL return code */
      2 sqlerrm     char(70) var,      /* Error message tokens */
      2 sqlerrp     char(8),           /* Diagnostic information */
      2 sqlerrd(6)  fixed binary(31),  /* Diagnostic information */
      2 sqlwarn,                       /* Warning flags */
        3 sqlwarn0  char(1),
        3 sqlwarn1  char(1),
        3 sqlwarn2  char(1),
        3 sqlwarn3  char(1),
        3 sqlwarn4  char(1),
        3 sqlwarn5  char(1),
        3 sqlwarn6  char(1),
        3 sqlwarn7  char(1),
      2 sqlext,
        3 sqlwarn8  char(1),
        3 sqlwarn9  char(1),
        3 sqlwarna  char(1),
        3 sqlstate  char(5);       /* State corresponding to SQLCODE */

SQL 記述子域の定義

次のステートメントは SQLDA を必要とします。

SQLCA とは異なり、1 つのプログラム内に複数の SQLDA が存在でき、任意の有効な名前を SQLDA に付けることができます。SQLDA をインクルードするには、次のように SQL INCLUDE ステートメントを 使用する必要があります。

  exec sql include sqlda;

SQLDA は、SQL 宣言セクション内で定義してはなりません。

図 2. SQL 記述子域の PL/I 宣言
  Dcl
    1 Sqlda based(Sqldaptr),
      2 sqldaid     char(8),          /* Eye catcher = 'SQLDA   ' */
      2 sqldabc     fixed binary(31), /* SQLDA size in bytes=16+44*SQLN*/
      2 sqln        fixed binary(15), /* Number of SQLVAR elements*/
      2 sqld        fixed binary(15), /* # of used SQLVAR elements*/
      2 sqlvar(Sqlsize refer(sqln)),  /* Variable Description     */
        3 sqltype   fixed binary(15), /* Variable data type       */
        3 sqllen    fixed binary(15), /* Variable data length     */
        3 sqldata   pointer,          /* Pointer to variable data value*/
        3 sqlind    pointer,          /* Pointer to Null indicator*/
        3 sqlname   char(30) var ;    /* Variable Name            */
  dcl Sqlsize   fixed binary(15);     /* number of sqlvars (sqln) */
  dcl Sqldaptr  pointer;

SQL ステートメントの組み込み

PL/I プログラムの最初のステートメントは、PROCEDURE または PACKAGE ステートメントでなければなりません。 実行可能ステートメントを置くことができる任意の場所で、プログラムに SQL ステートメントを追加できます。 それぞれの SQL ステートメントは EXEC (または EXECUTE) SQL で始まり、セミコロン (;) で終わる必要があります。

例えば、UPDATE ステートメントは次のようにコーディングされます。

  exec sql update Department
           export   Mgrno  = :Mgr_Num
           where    Deptno = :Int_Dept;
コメント

SQL ステートメントのほかに、ブランクを入力できる場所では 組み込み SQL ステートメントに PL/I コメントを組み込むことができます。

SQL ステートメントの継続

SQL ステートメントの行継続規則は、他の PL/I ステートメントと同じです。

コードの組み込み

SQL ステートメントまたは PL/I ホスト変数の宣言ステートメント を組み込むには、ソース・コード内でステートメントを組み込む場所に、次の SQL ステートメントを配置します。

  exec sql include member;
マージン

SQL ステートメントは、mn が MARGINS(m,n) コンパイル時オプションで指定される場所で、列 m から n にコーディングする必要があります。

名前

ホスト変数に対しては任意の有効な PL/I 変数名を使用できますが、制限として、「SQL」、「DSN」、または「IBM」で始まるホスト変数名、外部入り口名、またはアクセス計画名は使用しないでください。これらの名前は、データベース・マネージャーおよび PL/I 用に予約済みです。ホスト変数名の長さは、100 文字を超えてはなりません。

ステートメント・ラベル

END DECLARE SECTION ステートメント、および INCLUDE text-file-name ステートメント を例外として、実行可能 SQL ステートメントには PL/I ステートメントと 同様にラベル接頭部を付けることができます。

WHENEVER ステートメント

SQL WHENEVER ステートメントの GOTO 文節のターゲットは、PL/I ソース・コード内のラベルでなければならず、WHENEVER ステートメントによって影響を受ける SQL ステートメント すべての有効範囲内になければなりません。

ホスト変数の使用

SQL ステートメント内で使用するホスト変数は、すべて明示的に宣言する必要があります。ONEPASS が有効な場合は、SQL ステートメント内で使用するホスト変数は、SQL ステートメント内のホスト変数が最初に使用される前に宣言する必要があります。さらに、次の制限があります。

ホスト変数の宣言

ホスト変数の宣言は、通常の PL/I 変数宣言と同じ場所で行うことができます。

有効な PL/I 宣言のサブセットだけが、有効なホスト変数宣言として 認識されます。プリプロセッサーは、PL/I DEFAULT ステートメントに指定された データ属性デフォルトを使用しません。変数の宣言が認識されない場合は、ステートメントがその変数を参照すると、「The host variable token ID is not valid」というメッセージが出されることがあります。

変数の名前とデータ属性だけがプリプロセッサーによって使用され、位置合わせ、有効範囲、およびストレージの属性は無視されます。

数値ホスト変数

次の図は、有効な数値ホスト変数宣言の構文を示しています。

構文図を読む構文図をスキップする>>-+-DECLARE-+--+-variable-name---------+----------------------->
   '-DCL-----'  |   .-,-------------.   |
                |   V               |   |
                '-(---variable-name-+-)-'
 
>----+---------+-+-FIXED--+-------------------------+-+--------->
     +-BINARY--+ |        '-(precision-+--------+-)-' |
     +-BIN-----+ |                     '-,scale-'     |
     +-DECIMAL-+ '-FLOAT-+-----------------+----------'
     '-DEC-----'         '-(--precision--)-'
 
>--+---------------------------------------+-- ; --------------><
   '-Alignment and/or Scope and/or Storage-'
 

文字ホスト変数

次の図は、有効な文字ホスト変数の構文を示しています。

構文図を読む構文図をスキップする>>-+-DECLARE-+--+-variable-name---------+----------------------->
   '-DCL-----'  |   .-,-------------.   |
                |   V               |   |
                '-(---variable-name-+-)-'
 
>--+-CHARACTER-+--+----------+--+---------+--------------------->
   '-CHAR------'  '-(length)-'  +-VARYING-+
                                '-VAR-----'
 
>--+---------------------------------------+-- ; --------------><
   '-Alignment and/or Scope and/or Storage-'
 

グラフィック・ホスト変数

次の図は、有効なグラフィック・ホスト変数の構文を示しています。

構文図を読む構文図をスキップする>>-+-DECLARE-+--+-variable-name---------+----------------------->
   '-DCL-----'  |   .-,-------------.   |
                |   V               |   |
                '-(---variable-name-+-)-'
 
>--GRAPHIC--+----------+--+---------+--------------------------->
            '-(length)-'  +-VARYING-+
                          '-VAR-----'
 
>--+---------------------------------------+-- ; --------------><
   '-Alignment and/or Scope and/or Storage-'
 


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)