IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Cobol Discussion :

[z/OS] Appel DB2 dans un programme Cobol


Sujet :

Cobol

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [z/OS] Appel DB2 dans un programme Cobol
    Bonjour,

    Mon programme Cobol fait appel à des bases DB2 et la requête DB2 constituée me rend 1 ligne donc inutile de faire un declare curseur. Par contre, l'appel DB2 se fera plusieurs fois car en entrée de ce programme j'ai 1 fichier qui alimente les host variables de ma requête. Aussi, comment faire pour coder cela dans mon programme sans utiliser de declare curseur?

    Je vous remercie de votre réponse.

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Tout simplement en codant une boucle sur la lecture du fichier en entrée ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai dû mal exprimé ma demande car ma question n'est pas de savoir s'il faut faire une boucle mais comment coder un appel DB2 sans faire de Declare curseur car ma requête ne me renvoie qu'une ligne donc inutile de coder un declare.

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Il suffit de coder un SELECT simple entre EXEC SQL et END-EXEC sans coder de curseur (ni DECLARE / OPEN / FETCH / CLOSE ).

    Attention, il faut être certain de n'avoir qu'une seule ligne retournée (ou aucune d'ailleurs ...) sinon un SQLCODE négatif est renvoyé.

    Idéalement, c'est un accès sur clé primaire ou sur un index unique ...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Oki merci de ta réponse. Il suffit donc de faire un "simple" select avec le from le where sans le into.

  6. #6
    Membre éclairé Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Points : 801
    Points
    801
    Par défaut
    Le INTO est nécessaire pour récupérer les données "selectées".

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Peut-êtreUneRéponse
    Le INTO est nécessaire pour récupérer les données "selectées".
    Tout à fait ... Il faut bien entendu valoriser les variables hôtes, sinon ça ne présente guère d'intérêt ...

    Pour un curseur ces variables sont valorisées par l'instruction FETCH et dans une boucle et là dans une seule instruction SELECT.
    cf. :
    SELECT INTO

  8. #8
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour à tous.

    - On peut aussi utiliser les instructions usuelles de déclaration des fichiers et des opérations d’entrée/sortie sur ces fichiers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT fichier ASSIGN DATABASE-nomExterne
                   ORGANIZATION INDEXED
                   ACCESS....
                   RECORD KEY ....
    ... 
    FD fichier 
    01 ...
    ...
    OPEN INPUT fichier.
    ...
    READ (NEXT) fichier AT END ...
    …
    CLOSE fichier.
    - Pardon de me greffer sur cette discussion pour rassurer un tant soit peu les cobolistes purs et durs en disant que l’on peut accéder aux tables, vues et index de DB2 en les considérant comme de simples fichiers ASSIGN (és à) DATABASE (ou même DISK en acceptant de perdre certaines fonctionnalités) avec des descriptions externes de préférence ou même internes si on veut couper le cheveu en quatre.
    - Je fais cette remarque parce que je rencontre encore des développeurs qui continuent à penser qu’à partir du moment où ils sont devant une DB2, ils ne peuvent plus pisser la ligne comme d’habitude et qu’ils sont obligés de passer par SQL. A mon humble avis, la meilleure façon est de panacher les deux approches en fonction des traitements à réaliser. On choisira celle qui semble la plus adaptée pour résoudre le problème au moindre coût.
    - Dans le cas présent et à partir du moment où on a jugé nécessaire d’écrire un programme en Cobol, autant continuer sur la même lancée et n’utiliser le SQL que lorsqu’il devient inévitable de le faire.

    Cordialement
    Hédhili Jaïdane
    - - - - - - - - - - -

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses.

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Hédhili Jaïdane
    ...
    - On peut aussi utiliser les instructions usuelles de déclaration des fichiers et des opérations d’entrée/sortie sur ces fichiers.
    ...
    Attention !

    Cette technique est propre au DB2 sur l'AS/400 (ou ISeries ou I5/OS c'est pareil ...) mais ne s'applique absolument pas au DB2 for z/OS (le mainframe ...)

    Les fichiers qui contiennent les tables sont des VSAM / LDS mais ne sont "lisibles" dans un programme qu'à travers DB2 et donc du SQL ...

    Quant à DB2 for LUW je ne sais pas ...

  11. #11
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Salut Luc.

    Merci pour la précision. Effectivement, je parlais de DB2 sur l'AS400 et jai oublié de le mentionner. Pour les autres OS, je n'en sais rien. Autant pour moi.

    Hédhili Jaïdane
    - - - - - - - -

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PRO*COBOL] Appel SQL dans un programme COBOL
    Par JauB dans le forum Interfaces de programmation
    Réponses: 9
    Dernier message: 19/05/2010, 13h33
  2. [z/OS] Nom du JCL dans un programme COBOL
    Par ben_lille dans le forum Cobol
    Réponses: 6
    Dernier message: 17/09/2009, 13h13
  3. [PC] Commande Dos dans un programme Cobol
    Par Magoo dans le forum Cobol
    Réponses: 2
    Dernier message: 24/01/2008, 08h37
  4. DB2 dans les programmes COBOL/CICS
    Par tabitarh dans le forum DB2
    Réponses: 2
    Dernier message: 01/10/2007, 20h11
  5. SQL Dynamique dans un programme cobol
    Par genio dans le forum DB2
    Réponses: 14
    Dernier message: 04/12/2006, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo