Rational Developer for System z

Connexion à une base de données DB2 avec COBOL ou PL/I

Avant de commencer

Avant d'essayer de vous connecter à une base de données DB2, vous devez tout d'abord configurer une connexion à une base de données (voir Configuration d'une connexion à une base de données), puis, à l'aide de l'assistant prévu à cet effet, configurer votre plan de travail pour l'utilisation de cette base de données (voir Configuration de la connexion à une base de données zSeries DB2 UDB pour découvrir comment se connecter à une base de données DB2 OS/390).

Procédure

  1. Editez le groupe de propriétés associé au programme COBOL ou PL/I.
  2. Cliquez sur l'onglet COBOL ou PL/I pour ouvrir la page Paramètres COBOL ou Paramètres PL/I.
  3. Sur la page Options de compilation locale, indiquez les informations suivantes :
    Options de compilation
    TEST,MACRO,OPTIONS
    Remarque : Ne spécifiez pas d'options DB2 dans la zone Options de compilation. Les options et les sous-options de compilation sont automatiquement générées à partir de la connexion DB2 et des options entrées dans la zone Options SQL.
    SYSLIB
    Pour COBOL, spécifiez les éléments suivants :
    répertoire_installation\INCLUDE\COBOL_A
    Pour PL/I, spécifiez les éléments suivants :
    répertoire_installation\EXTRAS\INCLUDE\PLI
    Remarque : Remplacez répertoire_installation par le répertoire d'installation de DB2.
  4. Sélectionnez La source contient des instructions SQL EXEC.
  5. Cliquez sur Parcourir et sélectionnez votre connexion DB2. Si vous n'avez pas encore configuré de connexion à votre base de données, cliquez sur Nouvelle connexion.
  6. Facultatif : Dans la zone Options SQL, entrez des Options supplémentaires à transmettre au préprocesseur SQL. Séparez les différentes options SQL par des virgules.
  7. Cliquez sur l'onglet Lien pour ouvrir la page Options de liens dans l'éditeur de groupe de propriétés.
  8. Développez la procédure ELAXFLNK et cliquez sur l'étape LINK.
  9. Dans la zone Options de liens, entrez /de db2api.lib.
  10. Enregistrez le groupe de propriétés.
  11. Pour les programmes COBOL : Insérez l'instruction suivante avant l'utilisation des instructions SQL dans les sections WORKING-STORAGE, LOCAL-STORAGE ou LINKAGE de votre code :
    EXEC SQL INCLUDE SQLCA END-EXEC;
    Délimitez les instructions SQL avec des instructions EXEC SQL et END-EXEC. Voici un exemple d'utilisation de la base de données DB2 exemple :
    EXEC SQL UPDATE employee
           SET firstnme = 'Myname'
           WHERE empno = '000010' END-EXEC.
  12. Pour les programmes PL/I : Insérez l'instruction suivante avant d'utiliser des instructions SQL dans votre code :
    EXEC SQL INCLUDE SQLCA;
    EXEC SQL INCLUDE SQLDA;
    Veillez également à ce que toutes les instructions SQL de votre code soient formatées ainsi :
    EXEC SQL instruction;
    instruction correspond à votre instruction SQL.

Exemple

Exemple de code COBOL pour l'accès à une base de données DB2
      * ---------------------------------------------------
      *   Nom du module : COBOLDB2.cbl
      *
      *   Description : Exemple COBOL avec programme DB2.
      *
      *   Fonction : Exécute une sélection dans la table des employés
      *   de la base de données d'exemple (Sample) livrée avec DB2.
      *
      *   Options de compilation (modifiez le nom d'utilisateur et le mot de passe (USERNAME et PASSWORD)) :
      *   DATA,EXIT(ADEXIT(FTTDBKW)),sql ('nom d'utilisateur avec mot de passe')
      *
      *   SYSLIB :
      *   C:\Program Files\IBM\SQLLIB\INCLUDE\COBOL_A
      *
      *   Options ILINK :
      *   /de db2api.lib
      *
      * ---------------------------------------------------
       Division d'identification.
       Program-ID.  COBOLDB2.

       Division de données.

      *Vous devez inclure SQLCA dans Working-Storage
       Section Working-Storage.
       EXEC SQL INCLUDE SQLCA END-EXEC.

      *Structure des données pour stocker le prénom de l'employé
       01 Program-pass-fields.
          05 Firstnme         Pic x(30).

       Division de procédure.
      *Vous devez établir une connexion à la base de données !
            EXEC SQL CONNECT TO sample END-EXEC.

      *Exécutez SQL SELECT pour obtenir le prénom de l'employé.
      *avec le numéro d'employé 10.
           EXEC SQL SELECT firstnme INTO :Firstnme
           FROM employee
           WHERE empno = '000010' END-EXEC.

      *Affiche le prénom extrait de la base de données exemple.
           Display "Firstname"
           Display "========="
           Display Firstnme

           Display " "
      *Affiche le statut des instructions SQL.
           Display SQLCA

           Goback.
Exemple de code PL/I pour l'accès à une base de données DB2
*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;

Conditions d'utilisation | Commentaires

Ce centre de documentation utilise la technologie Eclipse. (http://www.eclipse.org)