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] Load DB2 d'un fichier contenant un varchar de 32k


Sujet :

Cobol

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [z/OS] Load DB2 d'un fichier contenant un varchar de 32k
    Bonjour,

    Je souhaiterais avoir de l'aide par rapport au problème suivant :

    J'ai une table contenant un champ varchar de 32000 caractères.
    Je souhaite le charger à l'aide d'un load data infile et un fichier.

    Dans ce fichier, juste avant la chaine varchar à charger, il faut donner sa longueur, soit 32000. Seulement, on doit donner cette valeur sur 2 octets et en cobol, je ne trouve pas le moyen de stocker 32000 sur 2 octets. Comment puis je procéder ?

    Merci d'avance

  2. #2
    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.

    Ta zone longueur doit être déclarée en 9(4) comp, et elle n'occupera que deux octets.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse.

    Le problème est que lorsque je passe 32000 sur une zone S9(4) comp, il la tronque en 2000 avant de l'ecrire, et on se retrouve en hexa avec 07d0 au lieu de 7d00

    Merci d'avance

  4. #4
    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
    Essaie S9(4) BINARY ou COMP-4.

    En passant, précise nous ton OS et ton compilateur comme indiqué dans cette discussion : Règle Tag [SystèmeExploitation-VersionCompilateur]

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Non, ça ne fonctionne pas. J'ai l'impression qu'il n'y a pas de solutions.

    Le 9(4) Binary stocke 2000 et le 9(4) comp-4 de même.

    J'ai tenté le 9(5) comp-4 et on a 4 octets et non 2.

    Et donc pour l'OS, il s'agit de Z/OS

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
               BINARY ou COMP-4
    Digits in PICTURE Clause   Storage Occupied
    1 through 4                            2 bytes
    5 through 9                            4 bytes
    10 through 18                         8 bytes
    Donc, définis une zone en PIC S9(5) BINARY (ou COMP-4, au choix)
    puis redéfinis-la pour ne prendre en compte que les 2 octects les plus à droite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    01  MAZONEBIN4 PIC S9(5) BINARY.                            
    01  FIL1   REDEFINES MAZONEBIN4.                            
         05  FIL2   PIC XX.                                     
         05  MAZONEBIN2X PIC XX.                                
         05  MAZONEBIN2 REDEFINES MAZONEBIN2X PIC S9(3) BINARY.
    MAZONEBIN4 contiendra X'00007D00' sur 4 octets.
    MAZONEBIN2X ou MAZONEBIN2 contiendra la même valeur X'7D00' mais sur 2 octets.

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup ! ça fonctionne !

  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
    Pour OS/390 et VM : 32000 doit pouvoir tenir en S9(4) COMP, COMP-4 ou BINARY (2 octets).
    S9(1) through S9(4) Binary half-word (2 bytes) -32768 through +32767
    Pour éviter les troncatures de ce genre, il faut utiliser l'option de compilation TRUNC(BIN) ou déclarer la zone en COMP-5.

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par Hédhili Jaïdane
    Pour OS/390 et VM : 32000 doit pouvoir tenir en S9(4) COMP, COMP-4 ou BINARY (2 octets).
    Oui, bien sûr. Sur 2 octets binaires, on peut compter en base 10 jusqu'à 65535, donc 32000 peuvent tenir.

    Mais alors comment vas-tu alimenter une zone de 4 chiffres représentatifs ( S9(4) BINARY) ) avec une valeur composée de 5 chiffres (32000) ? C'est Cobol qui nous limite et on est coincés si on n'allonge pas la zone d'un octet supplémentaire.

  10. #10
    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
    Citation Envoyé par Mercure Voir le message
    ...
    Mais alors comment vas-tu alimenter une zone de 4 chiffres représentatifs ( S9(4) BINARY) ) avec une valeur composée de 5 chiffres (32000) ? C'est Cobol qui nous limite et on est coincés si on n'allonge pas la zone d'un octet supplémentaire.
    Salut.

    Pour être sûr je viens de re-tester avec Cobol/2 pas très loin de Cobol for OS/390 & VM pour l'essentiel, quand on déclare en 9(4) COMP-5 (l'équivalent de l'option TRUNC(BIN)), l'initialisation peut se faire par un VALUE ou un MOVE à partir d'un littéral numérique ou d'une variable.

    Aux z/OSiste de confirmer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    000410 77  A           pic 9999 comp-5 Value 32000.
    000420 77  B           pic 9999 comp-5.
    000420 77  C           pic 9999 comp-5.
    000420 77  C0          pic 9(5) value 32900.
    000620 Procedure Division.
    000660     Display "A = " A.
               move 32800 to B.
    000660     Display "B = " B.
               move C0 to C.
    000660     Display "C = " C.
    Résultats :
    A = 32000
    B = 32800
    C = 32900

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    En effet, cela doit fonctionner avec COMP-5, tu as raison, mais ce n'est pas du Cobol standard et cela peut s'avérer gênant par la suite.

  12. #12
    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
    Citation Envoyé par Mercure Voir le message
    En effet, cela doit fonctionner avec COMP-5, tu as raison, mais ce n'est pas du Cobol standard et cela peut s'avérer gênant par la suite.
    COMP-5 ou l'option TRUNC(BIN) [option NOSTDTRUNC sur l'AS/400] avec BINARY, COMP, COMP-4.

    Qu'est ce qu'on ferais sans les extensions qu'IBM a apportées au langage Cobol sur ses différentes plateformes.

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

Discussions similaires

  1. [DB2] executer un fichier sql
    Par meufeu dans le forum DB2
    Réponses: 7
    Dernier message: 10/01/2009, 15h47
  2. [MySQL] execution fichier contenant de requete sql
    Par DarkMax dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/10/2005, 17h28
  3. Réponses: 9
    Dernier message: 22/09/2005, 11h52
  4. Trouver un fichier contenant une chaine ?
    Par narmataru dans le forum Linux
    Réponses: 2
    Dernier message: 29/04/2004, 10h49

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