Procedimiento
- Edite el grupo de propiedades asociado al programa COBOL o PL/I.
- Pulse el separador COBOL o PL/I para abrir la página Valores de COBOL o Valores de PL/I.
- 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.
- Seleccione El código fuente contiene sentencias EXEC SQL.
- 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.
- Opcional: En el campo Opciones SQL, entre
opciones adicionales para pasarlas al preprocesador SQL. Las distintas opciones SQL se separan con comas.
- Pulse el separador Enlace para abrir la página Opciones de enlace en el editor de grupo de propiedades.
- Expanda el procedimiento ELAXFLNK y pulse el paso LINK.
- En el campo Opciones de enlace, escriba /de
db2api.lib.
- Guarde el grupo de propiedades.
- 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.
- 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;