手順
- COBOL または PL/I プログラムに関連付けられたプロパティー・グループを編集する。
- 「COBOL」タブまたは「PL/I」タブをクリックして、「COBOL 設定」ページまたは「PL/I
設定」ページを開きます。
- 「ローカル・コンパイラー・オプション」ページで、次の情報を指定します。
- コンパイル・オプション
TEST,MACRO,OPTIONS
注: DB2 関連のオプションを「コンパイル・オプション」フィールドに指定しないでください。
必要なコンパイラー・オプションとサブオプションは、選択済みの DB2 接続、および「SQL オプション」フィールドに入力したオプションに基づいて、
自動的に生成されます。
- SYSLIB
- COBOL の場合、以下を指定します。
installation_directory¥INCLUDE¥COBOL_A
P/I の場合、以下を指定します。installation_directory¥EXTRAS¥INCLUDE¥PLI
注: installation_directory は、
実際の DB2 インストール・ディレクトリーに置き換えます。
- 「ソースに EXEC SQL が含まれている」を選択します。
- 「参照」をクリックして、DB2 接続を選択します。 データベースへの接続をまだセットアップしていない場合は、「新規接続」をクリックします。
- オプション: SQL プリプロセッサーに渡すための追加オプションを「SQL オプション」フィールドに入力します。 複数の SQL オプションは、コンマで区切ります。
- 「リンク」タブをクリックして、プロパティー・グループ・エディターで「リンク・オプション」ページを開きます。
- 「ELAXFLNK」プロシージャーを展開し、「LINK」ステップをクリックします。
- 「リンク・オプション」フィールドに、/de
db2api.lib を入力します。
- プロパティー・グループを保存します。
- COBOL プログラムの場合: コードの WORKING-STORAGE、LOCAL-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.
- 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;