Bonjour,
Je cherche à apprendre DB2 sous MVS. Sachant que je suis un developpeur cobol et je travaille sur OS390 avec des fichier VSAM.
Merci d'avance.
Bonjour,
Je cherche à apprendre DB2 sous MVS. Sachant que je suis un developpeur cobol et je travaille sur OS390 avec des fichier VSAM.
Merci d'avance.
Bonjour
Un bon bouquin est le "Application Programming & SQL Guide" de la documentation officielle.
A compléter par le SQL Référence.
Je vous remercie pour votre reponse.
Mais je cherche quelque chose plus facile pour commencer.
1- Comment declarer les tables dans la partie working?
2- Comment implementer des requetes DB2/SQL (Insertion, suppression, modification sur tables) en procedure division?
3- Comment connecter à la base DB2?
Merci d'avance.
Je suis toujours dans l'attente d'une reponse.
Quelq'un peut m'aider?
je serais très reconnaissant.
Merci
Bonsoir,
Vous évoquez COBOL. Ce qui suit a été écrit il y a plus de 15 ans, on était vraisemblablement en DB2 V5. Je l’ai bricolé tout en étant bien rouillé (plus de 10 ans sans DB2, sans COBOL et sans MVS...), donc il y aura des erreurs : à vous d’aménager...
Dans un 1er temps, on effectue un DCLGEN, c'est-à-dire qu’on déclare la structure de l’en-tête de la table VCI (propriétaire : PGE). Ceci permet au programme COBOL d’être en phase avec la structure en vigueur.
Code JCL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //DCLGEN EXEC PGM=IKJEFT01,DYNAMNBR=20 //STEPLIB ... //SYSTSPRT ... //SYSTSIN DD * DCLGEN TABLE(PGE.VCI) - LIBRARY(GTM.SOURCE(VCIDCLGE)) - ACTION(REPLACE) - LANGUAGE(COBOL) - STRUCTURE(VCISTRUCT) - QUOTE
Dans un 2e temps on précompile. A la détection de l’instruction suivante : EXEC SQL INCLUDE VCIDCLGE END-EXEC le précompilateur générera la structure VCIDCLGE de la table VCI.
Dans ce programme, on se contente de faire un INSERT.
De façon générale, chaque instruction SQL est encadrée par une paire EXEC, END-EXEC, qu'il s'agisse d'un INSERT, d'un SELECT, d'un DECLARE CURSOR, etc.
Code JCL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179 //GTMXISRT JOB (C1021BDEVGENE),'VCIISRT1',REGION=4M,COND=(4,LT), // MSGCLASS=X,NOTIFY=GTM,MSGLEVEL=(2,0) //************************************************************* //*** //*** GENERATION DE TUPLES POUR LA TABLE VCI //*** //************************************************************* //PC EXEC PGM=DSNHPC, // PARM='QUOTE,APOSTSQL,HOST(COBOL),S,X',REGION=4096K //DBRMLIB DD DSN=GTM.PGE.KOBOL.DBRM(VCIISRT1),DISP=SHR //SYSCIN DD DSN=&&KOBOL,DISP=(MOD,PASS),UNIT=SYSDA, // SPACE=(TRK,(20,50)) //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD SPACE=(TRK,(20,50)),UNIT=SYSDA //SYSUT2 DD SPACE=(TRK,(20,50)),UNIT=SYSDA //SYSIN DD * IDENTIFICATION DIVISION. PROGRAM-ID. VCIISRT1. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. DATA DIVISION. ***************************************************************** *** *** *** WORKING STORAGE *** *** *** ***************************************************************** WORKING-STORAGE SECTION. 01 FILLER. 05 NOM-PROGRAMME PIC X(08) VALUE "VCIISRT1". 01 FILLER. 05 TX-MULT-BOOL PIC S9(4) COMP. 05 NI-MODIF-BOOL PIC S9(4) COMP. 05 DT-MODIF-BOOL PIC S9(4) COMP. 05 HH-MODIF-BOOL PIC S9(4) COMP. 01 HEURE-DU-JOUR. 05 HH PIC 9(02). 05 MM PIC 9(02). 05 SS PIC 9(02). 01 ERREUR-TEXTE-PREF COMP PIC S9(9) VALUE +12. 01 ERREUR-TEXTE. 05 ERREUR-TEXTE-LN COMP PIC S9(4) VALUE +96. 05 TEXTE-ERR-SQL OCCURS 8 INDEXED BY X-ERR PIC X(0120). EXEC SQL INCLUDE VCIDCLGE END-EXEC ************ Généré par le précompilateur : ****************************************************************** * DCLGEN TABLE(PGE.VCI) * * LIBRARY(GTM.SOURCE(VCIDCLGE)) * * ACTION(REPLACE) * * LANGUAGE(COBOL) * * STRUCTURE(VCISTRUCT) * * QUOTE * * ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS * ****************************************************************** EXEC SQL DECLARE PGE.VCI TABLE ( NO_EXERCICE SMALLINT NOT NULL, NO_ENTR CHAR(8) NOT NULL, NI_INDIV CHAR(8) NOT NULL, NO_EIC SMALLINT NOT NULL, NO_COTIS SMALLINT NOT NULL, CD_TYPE_COT CHAR(1) NOT NULL, NO_GAR_TAR INTEGER NOT NULL, FK_GAR_TAR INTEGER NOT NULL, MT_FORFAIT DECIMAL(15, 0) NOT NULL, CD_FORFAIT CHAR(1) NOT NULL, TX_MULT INTEGER, NO_MAJ SMALLINT NOT NULL, NI_MODIF CHAR(8), DT_MODIF DATE, HH_MODIF TIME ) END-EXEC. ****************************************************************** * COBOL DECLARATION FOR TABLE PGE.VCI * ****************************************************************** 01 VCISTRUCT. 10 NO-EXERCICE PIC S9(4) USAGE COMP. 10 NO-ENTR PIC X(8). 10 NI-INDIV PIC X(8). 10 NO-EIC PIC S9(4) USAGE COMP. 10 NO-COTIS PIC S9(4) USAGE COMP. 10 CD-TYPE-COT PIC X(1). 10 NO-GAR-TAR PIC S9(9) USAGE COMP. 10 FK-GAR-TAR PIC S9(9) USAGE COMP. 10 MT-FORFAIT PIC S9(15)V USAGE COMP-3. 10 CD-FORFAIT PIC X(1). 10 TX-MULT PIC S9(9) USAGE COMP. 10 NO-MAJ PIC S9(4) USAGE COMP. 10 NI-MODIF PIC X(8). 10 DT-MODIF PIC X(10). 10 HH-MODIF PIC X(8). ****************************************************************** * THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 15 * ****************************************************************** ***********************Fin de la génération DCLGEN par le précompilateur 01 FILLER. 10 MY-SQLCODE PIC 9(9). ************************************************************** *** CODES-RETOUR SGBD. *** *** *** ************************************************************** EXEC SQL INCLUDE SQLCA END-EXEC. **************************************************************** *** *** *** PROCEDURE DIVISION *** *** *** **************************************************************** PROCEDURE DIVISION. INSERT-TUPLE. EXEC SQL INSERT INTO PGE.VCI VALUES ( :NO-EXERCICE , :NO-ENTR , :NI-INDIV , :NO-EIC , :NO-COTIS , :CD-TYPE-COT , :NO-GAR-TAR , :FK-GAR-TAR , :MT-FORFAIT , :CD-FORFAIT , :TX-MULT :TX-MULT-BOOL , :NO-MAJ , :NI-MODIF :NI-MODIF-BOOL , :DT-MODIF :DT-MODIF-BOOL , :HH-MODIF :HH-MODIF-BOOL ) END-EXEC . IF SQLCODE NOT EQUAL ZERO DISPLAY "INSERT : MERDUM ! MERDUM !" PERFORM ERREUR-SGBD MOVE 13 TO RETURN-CODE STOP RUN . *************************************************************** *** *** *** DB2 n’est pas content... *** *** *** *************************************************************** ERREUR-SGBD. MOVE SQLCODE TO MY-SQLCODE DISPLAY "SQLCODE = ", MY-SQLCODE DISPLAY SQLCA ********** Appel du programme DB2 DSNTIAR CALL "DSNTIAR" USING SQLCA ERREUR-TEXTE ERREUR-TEXTE-PREF PERFORM ERR-PRINT VARYING X-ERR FROM 1 BY 1 UNTIL X-ERR > 8 . ERREUR-SGBD-X. EXIT. ERR-PRINT. DISPLAY TEXTE-ERR-SQL (X-ERR) . *****ERR-PRINT-X. EXIT.
Dans un 3e temps, on compile et on linkedite.
Code JCL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 //********************************************************************** //*** //*** COMPILE THE COBOL PROGRAM IF THE PRECOMPILE //*** RETURN CODE IS 4 OR LESS //*** //********************************************************************** //COB EXEC PGM=IKFCBL00, // PARM='NODECK,SXREF,LIB,CLIST,DMAP,NODUMP,NOOPT' //STEPLIB DD DSN=SYS1.VSCOLIB,DISP=SHR //SYSIN DD DSN=&&KOBOL,DISP=(OLD,DELETE) 00250000 //SYSLIN DD DSN=&&LOADSET,DISP=(MOD,PASS),UNIT=SYSDA, 00270000 // SPACE=(TRK,(20,50)) //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD SPACE=(TRK,(20,50)),UNIT=SYSDA 00310000 //SYSUT2 DD SPACE=(TRK,(20,50)),UNIT=SYSDA 00320000 //SYSUT3 DD SPACE=(TRK,(20,50)),UNIT=SYSDA 00330000 //SYSUT4 DD SPACE=(TRK,(20,50)),UNIT=SYSDA 00340000 //**********************************************************************00200000 //*** //*** THE WONDERFULL LINKAGE EDITOR IN IT'S WORKS //*** //********************************************************************** //LKED EXEC PGM=IEWL,PARM='XREF,LET,LIST' 00390000 //SYSLIB DD DSN=SYS1.COB2COMP,DISP=SHR 00420000 // DD DSN=SYS1.COB2LIB,DISP=SHR // DD DSN=DSN410.SDSNLOAD,DISP=SHR 00100000 // DD DSN=PROTO.PGE.LOAD,DISP=SHR //SYSLIN DD DSN=&&LOADSET,DISP=(OLD,DELETE) 00470000 // DD DDNAME=SYSIN //*****SYSLMOD DD DSN=ETUD.LOAD(VCIISRT1),DISP=SHR //SYSLMOD DD DSN=PROTO.PGE.LOAD(VCIISRT1),DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD SPACE=(1024,(50,50)),UNIT=SYSDA 00520000 //*** NAME = NOM DU SOURCE //SYSIN DD * INCLUDE SYSLIB(DSNELI) NAME VCIISRT1(R)
On effectue le BIND PACKAGE :
Code JCL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 //* //********************************************************************** //*** //*** A LITTLE BIND PACKAGE IS GOOD FOR DB2 AND BRAVE PGE & GTM //*** Le DB2 utilisé : DB2E //*** //********************************************************************** //BIND EXEC PGM=IKJEFT01,DYNAMNBR=20 //DBRMLIB DD DSN=GTM.PGE.KOBOL.DBRM,DISP=SHR //STEPLIB DD ... //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM (DB2E) BIND PACKAGE (PGE) - QUALIFIER (PGE) - OWNER (PGE) - MEMBER (VCIISRT1) - ACTION (REPLACE) - VALIDATE (BIND) - ISOLATION (CS) - RELEASE (COMMIT) - EXPLAIN (YES) //***
On effectue le BIND PLAN :
Code JCL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 //* //********************************************************************** //*** //*** A LITTLE BIND PACKAGE IS GOOD FOR DB2 AND BRAVE PGE & GTM //*** //********************************************************************** //BIND EXEC PGM=IKJEFT01,DYNAMNBR=20 //STEPLIB DD ... //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM (DB2E) BIND PLAN (BATCHPGE) - PKLIST (PGE.*) - QUALIFIER (PGE) - OWNER (PGE) - ACTION (REPLACE) - VALIDATE (BIND) - ISOLATION (CS) - RELEASE (COMMIT) - EXPLAIN (YES) //***
On exécute :
Code JCL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 //********************************************************************** //*** //*** ON EXECUTE //*** //********************************************************************** //ONYVA EXEC PGM=IKJEFT01,DYNAMNBR=20 //STEPLIB ... //SYSTSIN DD * DSN SYSTEM(DB2E) RUN PROGRAM(VCIISRT1) PLAN(BATCHPGE) - PARM('SQL') - LIB('GTM.LOAD') END //SYSTSPRT DD SYSOUT=*
Si vous ne savez pas ce qu'est un DBRM, un package, un plan, etc., il faudra quand même que vous vous formiez...
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager