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
    PL/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-STORAGE, LOCAL-STORAGE 또는 LINKAGE 섹션에서 SQL문을 사용하기 전에 다음 명령문을 삽입하십시오.
    EXEC SQL INCLUDE SQLCA END-EXEC;
    EXEC SQLEND-EXEC 명령문으로 SQL 문을 구분합니다. 다음은 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 데이터베이스에 액세스할 샘플 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;

이용 약관 | 피드백

이 Information Center는 Eclipse 기술로 구현됩니다. (http://www.eclipse.org 웹사이트 참조)