프로시저
- COBOL 또는 PL/I 프로그램과 연관된 특성 그룹을
편집하십시오.
- COBOL 또는 PL/I 탭을 클릭하여
COBOL 설정 또는 PL/I
설정 페이지를 여십시오.
- 로컬 컴파일러 옵션 페이지에서
다음과 같은 정보를 제공하십시오.
- 컴파일 옵션
TEST,MACRO,OPTIONS
주: 컴파일 옵션 필드에서 DB2 관련 옵션을
지정하지 마십시오. 선택한 DB2 연결 및
SQL 옵션 필드에 입력한 옵션에서
필요한 컴파일러 옵션 및 하위 옵션이 자동으로 생성됩니다.
- SYSLIB
- COBOL의 경우 다음과 같이 지정하십시오.
installation_directory\INCLUDE\COBOL_A
PL/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;
EXEC SQL 및 END-EXEC 명령문으로 SQL 문을 구분합니다.
다음은 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 데이터베이스에 액세스할 샘플 PL/I 코드
* ---------------------------------------------------
* 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;