Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/11/2006, 09h50   #1
Membre régulier
 
Inscription : novembre 2005
Messages : 462
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 462
Points : 75
Points : 75
Par défaut SQL Dynamique dans un programme cobol

Bonjour les forumnautes !
Comment effectuer du sql dynamique via un programme cobol ?
J'ai un fichier en entrée avec des noms de tables DB2 => OK
Je veux acceder à toutes les tables du fichier en entrée par SQL dynamique...
Comment fait-on ? Avez-vous un exemple à me donner ? faut-il mettre des zones précises en linkage ? etc...

Merci pour vos réponses !
genio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 12h22   #2
Membre régulier
 
Inscription : novembre 2005
Messages : 462
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 462
Points : 75
Points : 75
Personne pour me répondre ?
Peut-être me suis-je mal fait comprendre ?
Je voudrais effectuer des accès dynamiques à des tables DB2, dans un programme cobol (pour effectuer des count (*))... quelqu'un a-t-il un exemple de programme cobol, utilisant du sql dynamique... j'aimerai savoir quels sont les paramètres à rajouter... en working... en linkage etc...

Merci d'avance pour vos réponses...
genio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 15h53   #3
Membre régulier
 
Inscription : novembre 2005
Messages : 462
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 462
Points : 75
Points : 75
En fait, ma question est la suivante : Comment construire une requête dynamique dans un programme Cobol...

Merci pour vos réponses
genio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 14h00   #4
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Bonjour,

Tu trouveras des exemples dans l'Application Programming
and SQL Guide

Version 7

Document Number SC26-9933-04

La difficulté en cobol est de traiter ( si tu t'en sers ) la SQLDA. Il faut créer un programme qui appelle un sous pro pour allouer la SQLDA en linkage.

Alex.
alex. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 14h00   #5
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Bonjour,

Tu trouveras des exemples dans l'Application Programming
and SQL Guide

Version 7

Document Number SC26-9933-04

La difficulté en cobol est de traiter ( si tu t'en sers ) la SQLDA. Il faut créer un programme qui appelle un sous pro pour allouer la SQLDA en linkage.

Alex.
alex. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 23h23   #6
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 097
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 097
Points : 1 706
Points : 1 706
Moi, je regarderais là dedans :
Dynamic SQL for fixed-list SELECT statements

Citation:
Envoyé par alex.
...
La difficulté en cobol est de traiter ( si tu t'en sers ) la SQLDA. Il faut créer un programme qui appelle un sous pro pour allouer la SQLDA en linkage.
Vous êtes vraiment sûr de ça ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2006, 11h15   #7
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Vous pouvez regarder les samples fournis avec le redbook :
Squeezing the Most Out of Dynamic SQL with DB2 for z/OS and OS/390.

Pour les télécharger :
ftp://www.redbooks.ibm.com/redbooks/SG246418
alex. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2006, 21h18   #8
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Par défaut Curseur ?

Je pense qu'il faut gérer ça par curseur.

Code :
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
Working-Storage Section.             
01 Compteur pic s9(7) Comp-3.
01 MyString pic x(80).

Linkage Section.                     
     Exec sql include sqlca End-Exec. 

Puis, dans la PD, itérer sur le fichier qui contient le nom des tables, puis préparer et exécuter l'instruction de comptage de chaque table via une lecture par curseur.

* Concaténer en ZT l'intruction de comptage SQL avec le nom de la table:

String  'Select Count(*) From ' Delimited By Size
                         ' ' Delimited By Size      
                          NomTable   Delimited By ' '   
                                          Into MyString.              

Exec sql Prepare SqlStm From :MyString End-exec.

Exec sql Declare c1 cursor For SqlStm End-exec.

Exec sql Open c1 End-exec. 

Exec sql Fetch c1 Into :Compteur End-exec.  

Exec sql Close c1 End-exec.     

Boucle sur lecture fichier
et ça devrait aller.

Nous tenir au courant, svp.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 08h23   #9
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 097
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 097
Points : 1 706
Points : 1 706
Pour moi, l'exemple donné par Mercure me semble pas mal ...

Mais encore une fois pourquoi mettre la SQLCA en LINKAGE SECTION ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 12h05   #10
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Par défaut Sqlca

Luc,

Code :
... pourquoi mettre la SQLCA en LINKAGE SECTION ?
Parce qu'il me semble bien, sauf erreur de ma part, que la zone de communication de SQL (SQLCA) n'est pas automatiquement générée par le compilateur Cobol sur toutes les plates-formes qui supportent à la fois Cobol et DB2, par ex. sur iSeries-i5-AS/400. Or, ce dernier en a besoin pour compiler correctement les instructions Cobol que SQL génère à partir des instructions source contenues entre Exec sql et End-exec.

Me trompè-je ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 16h38   #11
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 097
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 097
Points : 1 706
Points : 1 706
Citation:
Envoyé par Mercure
... Parce qu'il me semble bien, sauf erreur de ma part, que la zone de communication de SQL (SQLCA) n'est pas automatiquement générée par le compilateur Cobol sur toutes les plates-formes qui supportent à la fois Cobol et DB2, par ex. sur iSeries-i5-AS/400. Or, ce dernier en a besoin pour compiler correctement les instructions Cobol que SQL génère à partir des instructions source contenues entre Exec sql et End-exec ...
Petite précision :
J'ai supposé que l'environnement dont il était question ici était le z/OS et par conséquent toutes les remarques que j'ai pu faire ou que je vais faire ne s'appliquent qu'à celui-ci ...

Je suis tout à fait d'accord qu'il faut inclure dans un programme COBOL DB2 la SQLCA pour pouvoir programmer de manière correcte ...
Ce qui me surprend un peu c'est de positionner cette déclaration dans la LINKAGE SECTION du programme COBOL ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 19h09   #12
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Par défaut Choix

FYI.
En fait, sur iSeries-i5-AS/400-etc, lorsqu'on utilise le compilateur "original" (OPM), on peut inclure la SQLCA soit en Working Storage Section, soit en Linkage Section, au choix. L'inclusion de la SQLCA peut toutefois être omise si on déclare explicitement les variables SQLCODE et/ou SQLSTATE. Dans ce dernier cas, la zone de communication de SQL (SQLCA) sera généré par le compilateur et les 2 variables seront renommées. Cependant, dans les récents modèles ILE du compilateur Cobol, la SQLCA est effectivement systématiquement générée par ce compilateur si elle n'est pas explicitement déclarée en WSS ou LS.

Qu'on se le dise !
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 19h33   #13
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 097
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 097
Points : 1 706
Points : 1 706
Citation:
Envoyé par Mercure
FYI.
En fait, sur iSeries-i5-AS/400-etc ...
Qu'on se le dise !
C'est différent en z/OS clairement ...

Bon maintenant, je pense que l'auteur initial du sujet doit nous préciser dans quel environnement il travaille et nous dire aussi où il en est de ses propres essais ..
Je pense qu'il a maintenant suffisamment d'éléments pour avancer par lui-même ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 11h00   #14
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Bonjour,

Pour la question sur le SQLDA de Luc, cela ne concerne que les varying list select. Comme on ne connait pas à l'avance le nombre de colonnes, on ne peut pas définir une taille fixe de SQLDA. Cela nécessite de faire une allocation par la suite et en cobol, le seul moyen est de faire un call.

Tu peux regarder dans l'Application Programming Guide

APPENDIX1.4.1 Sample COBOL dynamic SQL program.

APPENDIX1.4.1.2 Storage allocation

COBOL does not provide a means to allocate main storage within a program. You can achieve the same end by having an initial program which
allocates the storage, and then calls a second program that manipulates the pointer. (COBOL does not permit you to directly manipulate the
pointer because errors and abends are likely to occur.)

The initial program is extremely simple. It includes a working storage section that allocates the maximum amount of storage needed. This program
then calls the second program, passing the area or areas on the CALL statement. The second program defines the area in the linkage section and
can then use pointers within the area.

If you need to allocate parts of storage, the best method is to use indexes or subscripts. You can use subscripts for arithmetic and comparison
operations.

Alex.
alex. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 11h23   #15
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Par défaut Confusion SQLCA & SQLDA

Je pense qu'il y a eu confusion entre SQLCA et SQLDA. Il faut dire qu'il y a de quoi avec des noms pareils !

Mais ce que dit Alex sur la SQLDA est exact dans la mesure où, pour gérer des zones de fichier via la SQLDA, cela demande pas mal d'efforts et de lignes de programmation, que ce soit en Cobol ou dans un autre langage d'ailleurs.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h35.


 
 
 
 
Partenaires

Hébergement Web