Rational Developer for System z

Conectar a una base de datos DB2 utilizando COBOL o PL/I

Antes de empezar

Antes de intentar conectarse a una base de datos DB2, primero debe configurar una conexión de base de datos (consulte la sección Configurar una conexión de base de datos) y luego configurar el entorno de trabajo para que utilice dicha conexión de base de datos con el asistente Conexión de base de datos (consulte la sección Configurar la conexión con una base de datos DB2 UDB zSeries para obtener un ejemplo de cómo conectarse a una base de datos OS/390 DB2).

Procedimiento

  1. Edite el grupo de propiedades asociado al programa COBOL o PL/I.
  2. Pulse el separador COBOL o PL/I para abrir la página Valores de COBOL o Valores de PL/I.
  3. En la página Opciones de compilador local, proporcione la siguiente información:
    Opciones de compilación
    TEST,MACRO,OPTIONS
    Nota: No especifique opciones relacionadas con DB2 en el campo Opciones de compilación. Las opciones y subopciones de compilador necesarias se crean automáticamente a partir de la conexión DB2 seleccionada y las opciones que indique en el campo Opciones SQL.
    SYSLIB
    Para COBOL, especifique lo siguiente:
    directorio_instalación\INCLUDE\COBOL_A
    Para PL/I, especifique lo siguiente:
    directorio_instalación\EXTRAS\INCLUDE\PLI
    Nota: Sustituya directorio_instalación por el directorio de instalación de DB2.
  4. Seleccione El código fuente contiene sentencias EXEC SQL.
  5. Pulse Examinar y seleccione la conexión de DB2. Si todavía no ha configurado una conexión con la base de datos, pulse Nueva conexión.
  6. Opcional: En el campo Opciones SQL, entre opciones adicionales para pasarlas al preprocesador SQL. Las distintas opciones SQL se separan con comas.
  7. Pulse el separador Enlace para abrir la página Opciones de enlace en el editor de grupo de propiedades.
  8. Expanda el procedimiento ELAXFLNK y pulse el paso LINK.
  9. En el campo Opciones de enlace, escriba /de db2api.lib.
  10. Guarde el grupo de propiedades.
  11. Para programas COBOL: inserte la siguiente sentencia antes de usar sentencias SQL en las secciones WORKING-STORAGE, LOCAL-STORAGE o LINKAGE del código:
    EXEC SQL INCLUDE SQLCA END-EXEC;
    Delimite las sentencias SQL con sentencias EXEC SQL y END-EXEC. El siguiente es un ejemplo de utilización de la base de datos de ejemplo DB2:
    EXEC SQL UPDATE employee
           SET firstnme = 'Myname'
           WHERE empno = '000010' END-EXEC.
  12. Para programas PL/I: inserte la siguiente sentencia antes de usar sentencias SQL en el código:
    EXEC SQL INCLUDE SQLCA;
    EXEC SQL INCLUDE SQLDA;
    Asegúrese asimismo de que todas las sentencias SQL tienen el siguiente formato en su código:
    EXEC SQL sentencia;
    donde sentencia es su sentencia SQL.

Ejemplo

Código COBOL de ejemplo para acceder a una base de datos DB2
      * ---------------------------------------------------
      *   Nombre de módulo: COBOLDB2.cbl
      *
      *   Descripción: COBOL de ejemplo con programa DB2.
      *
      *   Objetivo: realizar una selección (Select) en la tabla de empleados
      *   de la base de datos de ejemplo (sample en el código) que viene con DB2.
      *
      *   COMPLILER OPTIONS (hay que cambiar USERNAME y PASSWORD):
      *   DATA,EXIT(ADEXIT(FTTDBKW)),sql('database sample user USERNAME using PASSWORD')
      *
      *   SYSLIB:
      *   C:\Archivos de programa\IBM\SQLLIB\INCLUDE\COBOL_A
      *
      *   ILINK OPTIONS:
      *   /de db2api.lib
      *
      * ---------------------------------------------------
       Identification Division.
       Program-ID.  COBOLDB2.

       Data Division.

      *Asegurarse de que SQLCA está incluido en Working-Storage
       Working-Storage Section.
       EXEC SQL INCLUDE SQLCA END-EXEC.

      *Estructura de datos para almacenar el nombre del empleado
       01 Program-pass-fields.
          05 Firstnme         Pic x(30).

       Procedure Division.
      *Hay que establecer una conexión con la base de datos
            EXEC SQL CONNECT TO sample END-EXEC.

      *Realizar una selección SQL SELECT para obtener el nombre del empleado
      *cuyo número de empleado es 10.
           EXEC SQL SELECT firstnme INTO :Firstnme
           FROM employee
           WHERE empno = '000010' END-EXEC.

      *Visualiza el nombre obtenido de la base de datos de ejemplo (su nombre es sample).
           Display "Firstname"
           Display "========="
           Display Firstnme

           Display " "
      *Visualiza el estado de las sentencias SQL
           Display SQLCA

           Goback.
Código PL/I de ejemplo para acceder a una base de datos DB2
*PROCESS MARGINS(1,100) LANGLVL(SAA2) MACRO;
*PROCESS SOURCE XREF;
*PROCESS NOT('ª^') DFT(BYVALUE)  ;
*PROCESS INCLUDE (EXT('CPY','INC','PLP','MRP'));

/*********************************************************************/
/*  Autor                 : Su nombre                           */
/*  Fecha de escritura    : 7/07/04                                 */
/*  Funciones primarias   : Hacer select en la db2 DB de ejemplo    */
/*                                                                   */
/*  Qué hay que cambiar:                                            */
/*  Debe cambiar USERNAME y PASSWORD para la base de datos de       */
/*  ejemplo Sample DB2 en la sentencia *PROCESS PP(SQL... y en la   */
/*  consulta Connect hacia el centro de este código de ejemplo.           */
/*                                                                   */
/*********************************************************************/
 DB2Samp: PROCEDURE OPTIONS(MAIN);

    DISPLAY('EXAMPLE STARTED.');

 /*******************************************************************/
 /* Declarar estructuras SQL */
 /*******************************************************************/
 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');

 /*******************************************************************/
 /* Imprescindible conectar con base de datos para encontrar tabla  */
 /*******************************************************************/
 EXEC SQL CONNECT TO sample USER 'USERNAME' using 'PASSWORD';
 CALL PRSQLC ('CONNECT TO SAMPLE');


 /********************************************************************/
 /*Hace una operación SELECT para obtener el nombre del empleado     */
 /*cuyo número es el '000010' y lo almacena en la variable           */
 /*FIRSTNME y luego lo visualiza.                                    */
 /********************************************************************/
  EXEC SQL SELECT firstnme
           INTO :FIRSTNME
           FROM employee
           WHERE empno = '000010';

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

           CALL PRSQLC ('SELECT');


 /****************************************************/
 /****************************************************/
 /* El proc. PRSQLC verifica que SQL ha funcionado.  */
 /* Si no funciona, visualizará el código SQL        */
 /* y el mensaje de error SQL.                */
 /*                                                  */
 /* Escrito por: persona                             */
 /****************************************************/
 /****************************************************/
    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;

Términos de uso | Comentarios

Este Information Center está basado en tecnología Eclipse. (http://www.eclipse.org)