Rational Developer for System z

COBOL または PL/I を使用した DB2 データベースへの接続

始める前に

DB2® データベースへの接続を試みる前に、まずデータベース接続を構成し (データベース接続の構成を参照)、次にデータベース接続ウィザードを使用して、 そのデータベース接続を使用するようにワークベンチを構成する必要があります (OS/390® DB2 データベースへの接続方法の例については、 DB2 UDB zSeries データベースへの接続のセットアップを参照してください)。

手順

  1. COBOL または PL/I プログラムに関連付けられたプロパティー・グループを編集する。
  2. 「COBOL」タブまたは「PL/I」タブをクリックして、「COBOL 設定」ページまたは「PL/I 設定」ページを開きます。
  3. 「ローカル・コンパイラー・オプション」ページで、次の情報を指定します。
    コンパイル・オプション
    TEST,MACRO,OPTIONS
    注: DB2 関連のオプションを「コンパイル・オプション」フィールドに指定しないでください。 必要なコンパイラー・オプションとサブオプションは、選択済みの DB2 接続、および「SQL オプション」フィールドに入力したオプションに基づいて、 自動的に生成されます。
    SYSLIB
    COBOL の場合、以下を指定します。
    installation_directory¥INCLUDE¥COBOL_A
    P/I の場合、以下を指定します。
    installation_directory¥EXTRAS¥INCLUDE¥PLI
    注: installation_directory は、 実際の DB2 インストール・ディレクトリーに置き換えます。
  4. 「ソースに EXEC SQL が含まれている」を選択します。
  5. 「参照」をクリックして、DB2 接続を選択します。 データベースへの接続をまだセットアップしていない場合は、「新規接続」をクリックします。
  6. オプション: SQL プリプロセッサーに渡すための追加オプションを「SQL オプション」フィールドに入力します。 複数の SQL オプションは、コンマで区切ります。
  7. 「リンク」タブをクリックして、プロパティー・グループ・エディターで「リンク・オプション」ページを開きます。
  8. 「ELAXFLNK」プロシージャーを展開し、「LINK」ステップをクリックします。
  9. 「リンク・オプション」フィールドに、/de db2api.lib を入力します。
  10. プロパティー・グループを保存します。
  11. COBOL プログラムの場合: コードの WORKING-STORAGELOCAL-STORAGE、 または LINKAGE セクションで SQL ステートメントを使用する前に、 次のステートメントを挿入します。
    EXEC SQL INCLUDE SQLCA END-EXEC;
    SQL ステートメントの範囲を、EXEC SQL ステートメントと END-EXEC ステートメントで区切ります。 DB2 サンプル・データベースを使用する例を示します。
    EXEC SQL UPDATE employee
           SET firstnme = 'Myname'
           WHERE empno = '000010' END-EXEC.
  12. PL/I プログラムの場合: コードで SQL ステートメントを使用する前に、次のステートメントを挿入します。
    EXEC SQL INCLUDE SQLCA;
    EXEC SQL INCLUDE SQLDA;
    また、使用する SQL ステートメントがすべて、コード内で次のように形式設定されていることを確認してください。
    EXEC SQL statement;
    ここで、 statement は使用する SQL ステートメントです。

DB2 データベースにアクセスするためのサンプル COBOL コード
      * ---------------------------------------------------
      *   Module Name: COBOLDB2.cbl
      *
      *   Description: Sample COBOL with DB2 program.
      *
      *   Purpose: Performs a Select on the employee table
      *   in the Sample database shipped with DB2.
      *
      *   COMPLILER OPTIONS (be sure to change the USERNAME and PASSWORD):
      *   DATA,EXIT(ADEXIT(FTTDBKW)),sql('database sample user USERNAME using PASSWORD')
      *
      *   SYSLIB:
      *   C:¥Program Files¥IBM¥SQLLIB¥INCLUDE¥COBOL_A
      *
      *   ILINK OPTIONS:
      *   /de db2api.lib
      *
      * ---------------------------------------------------
       Identification Division.
       Program-ID.  COBOLDB2.

       Data Division.

      *Make sure you have SQLCA included in Working-Storage
       Working-Storage Section.
       EXEC SQL INCLUDE SQLCA END-EXEC.

      *Data structure to store the Firstname of the employee
       01 Program-pass-fields.
          05 Firstnme         Pic x(30).

       Procedure Division.
      *A Connection to the database must be made!
            EXEC SQL CONNECT TO sample END-EXEC.

      *Performs a SQL SELECT to get the firstname of the employee
      *with the employee number of 10.
           EXEC SQL SELECT firstnme INTO :Firstnme
           FROM employee
           WHERE empno = '000010' END-EXEC.

      *Displays the firstname we pulled from the Sample database.
           Display "Firstname"
           Display "========="
           Display Firstnme

           Display " "
      *Displays the status of the SQL statements
           Display SQLCA

           Goback.
DB2 データベースにアクセスするためのサンプル PL/I コード
*PROCESS MARGINS(1,100) LANGLVL(SAA2) MACRO;
*PROCESS SOURCE XREF;
*PROCESS NOT('ª^') DFT(BYVALUE)  ;
*PROCESS INCLUDE (EXT('CPY','INC','PLP','MRP'));

/*********************************************************************/
/*  Author                : Your name                                */
/*  Date-written          : 7/07/04                                  */
/*  Primary Function(s)   : Perfom a select on the Sample db2 DB     */
/*                                                                   */
/*  What you need to change:                                         */
/*  Make sure you change the USERNAME and PASSWORD for your Sample   */
/*  DB2 database BOTH in the *PROCESS PP(SQL... statment and in the  */
/*  Connect query towards the middle of this example code.           */
/*                                                                   */
/*********************************************************************/
 DB2Samp: PROCEDURE OPTIONS(MAIN);

    DISPLAY('EXAMPLE STARTED.');

 /*******************************************************************/
 /* declare SQL structures                                          */
 /*******************************************************************/
 EXEC SQL INCLUDE SQLCA;
 EXEC SQL INCLUDE SQLDA;
 EXEC SQL WHENEVER SQLERROR CONTINUE;

 DCL VALCODE                 BINARY(31) FIXED INIT(0);
 DCL GOODCODE                BINARY(31) FIXED INIT(0);
 DCL FIRSTNME                 CHAR(30) var init('NOVAL');

 /*******************************************************************/
 /* CONNECT TO DATABASE IS MANDATORY OR TABLE WON'T BE FOUND        */
 /*******************************************************************/
 EXEC SQL CONNECT TO sample USER 'USERNAME' using 'PASSWORD';
 CALL PRSQLC ('CONNECT TO SAMPLE');


 /********************************************************************/
 /*Performs a SELECT to get the first name of the employee           */
 /*with and employee number of '000010' and store it in the variable */
 /*FIRSTNME and then displays it.                                    */
 /********************************************************************/
  EXEC SQL SELECT firstnme
           INTO :FIRSTNME
           FROM employee
           WHERE empno = '000010';

           DISPLAY('FIRSTNME');
           DISPLAY('========');
           DISPLAY(FIRSTNME);
           DISPLAY('');

           CALL PRSQLC ('SELECT');


 /****************************************************/
 /****************************************************/
 /* The PRSQLC procedure verifys that the SQL worked.*/
 /* If it does not work, it will display the SQLCode */
 /* as well as the SQL error message.                */
 /*                                                  */
 /* Written by: person                               */
 /****************************************************/
 /****************************************************/
    PRSQLC:   PROCEDURE(FUNCTION);
    DECLARE FUNCTION CHARACTER (80) VARYING;

    IF (SQLCODE = GOODCODE) THEN
       PUT SKIP(2) EDIT (FUNCTION, ' WAS SUCCESSFUL')
                     (A(LENGTH(FUNCTION)), A(15));
    ELSE DO;
       IF (SQLCODE ^= 1) THEN DO;
          PUT SKIP(2) EDIT (FUNCTION, ' GOT SQLCODE ', sqlcode)
                     (A(LENGTH(FUNCTION)), A(13), F(8));
          PUT SKIP(2) EDIT (FUNCTION, ' GOT SQLERRM ', SQLERRM)
                     (A(LENGTH(FUNCTION)), A(13), A(70));
          VALCODE = VALCODE + 1;
          PUT SKIP(2) EDIT ('| VALCODE = ', VALCODE) (A(12), F(8));
       END;
       ELSE PUT SKIP(2) EDIT (FUNCTION, ' REACHED BOTTOM OF TABLE')
                       (A(LENGTH(FUNCTION)), A(24));
    END;
 END PRSQLC;
 /**************************************************/
 /**************************************************/

 EXEC SQL COMMIT;


 /*******************************************************************/
 END DB2Samp;

ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)