Procédure
- Editez le groupe de propriétés associé au programme COBOL
ou PL/I.
- Cliquez sur l'onglet COBOL ou
PL/I pour ouvrir la page Paramètres
COBOL ou Paramètres PL/I.
- 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.
- Sélectionnez La source contient des instructions SQL EXEC.
- 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.
- 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.
- Cliquez sur l'onglet Lien pour ouvrir la page Options de liens dans l'éditeur
de groupe de propriétés.
- Développez la procédure ELAXFLNK et cliquez sur l'étape
LINK.
- Dans la zone Options de liens, entrez /de
db2api.lib.
- Enregistrez le groupe de propriétés.
- 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.
- 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;
où 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;