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

DB2 Discussion :

Insert et Perform


Sujet :

DB2

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut Insert et Perform
    Bonsoir,

    Avant tout, je précise que le probleme est rencontré sur MVS.

    Est ce que la commande suivante vous parait "viable" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Perform varying I from 1 by 1 until I > 3
    EXEC SQL
      INSERT INTO MA.TABLE 
        (VA1, VA2, VA3)
        VALUES (:HVA1(I), :HVA2(I), :HVA3(I))
    END-EXEC.
    END-PERFORM
    avec en WSS

    mon indice
    mes 3 variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    01  INIT-TABLE-HVA1.
          05  FILLER  PIC  X(1)  VALUE 'A'.
          05  FILLER  PIC  X(1)  VALUE 'B'.
          05  FILLER  PIC  X(1)  VALUE 'C'.
    01  TABLE-HVA1  REDEFINES  INIT-TABLE-HVA1..
          05  HVA1    PIC  X(1)  OCCURS  3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    01  INIT-TABLE-HVA2.
          05  FILLER  PIC  X(2)  VALUE 'AA'.
          05  FILLER  PIC  X(2)  VALUE 'BB'.
          05  FILLER  PIC  X(2)  VALUE 'CC'.
    01  TABLE-HVA2  REDEFINES  INIT-TABLE-HVA2.
          05  HVA2    PIC  X(2)  OCCURS  3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    01  INIT-TABLE-HVA3.
          05  FILLER  PIC  X(3)  VALUE 'AAA'.
          05  FILLER  PIC  X(3)  VALUE 'BBB'.
          05  FILLER  PIC  X(3)  VALUE 'CCC'.
    01  TABLE-HVA3  REDEFINES  INIT-TABLE-HVA3..
          05  HVA3    PIC  X(3)  OCCURS  3.
    Le but étant d'inserer les 3 lignes suivantes dans la table MA.TABLE :
    ------------------------|
    | VA1 | VA2 | VA3 |
    ------------------------|
    | A | AA | AAA |
    | B | BB | BBB |
    | C | CC | CCC |

    En effet, lors de la compil(, le BINDALL ne passe pas (unsuccessful)...

    D'avance merci

    Ted

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Citation Envoyé par ted the Ors
    ...
    Avant tout, je précise que le probleme est rencontré sur MVS.

    Est ce que la commande suivante vous parait "viable" ?
    ...
    Je pense que ça ne marche pas ...

    Extrait du "DB2 z/OS Application Programming and SQL Guide V7" :
    "You cannot define host variables, other than indicator variables, as arrays. You can specify OCCURS only when defining an indicator structure. You cannot specify OCCURS for any other type of host variable. "

    2.4.3.4 Using host variables

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Ah flute...

    Le probleme c'est que je dois faire ces insertions de lignes sans passer par plusieurs "insert" (1 / lignes)...

    Une idée?

    Peut etre en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Perform varying I FROM 1 BY 1 until I > 3
    MOVE HVA1(I) TO WS-HVA1
    MOVE HVA2(I) TO WS-HVA2
    MOVE HVA3(I) TO WS-HVA3
    EXEC SQL
      INSERT INTO MA.TABLE 
        (VA1, VA2, VA3)
        VALUES (WS-HVA1,WS-HVA2,WS-HVA3)
    END-EXEC.
    END-PERFORM
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WS-HVA1 PIC X(1).
    WS-HVA2 PIC X(2).
    WS-HVA3 PIC X(3).

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Oui je pense que ça devrait marcher ...


    ...
    Le probleme c'est que je dois faire ces insertions de lignes sans passer par plusieurs "insert" (1 / lignes)...
    Mais pourquoi donc ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Citation Envoyé par Luc Orient
    Oui je pense que ça devrait marcher ...
    Ah bonne nouvelle

    Citation Envoyé par Luc Orient
    Mais pourquoi donc ?
    Disons que c'est difficilement maintenable et pas très propre...J'ai pris un exemple avec 3 lignes et 3 données mais imaginons rien que s'il s'agit de 100 lignes cela génére beaucoup de lignes de codes...
    De plus, je doute que les DBA acceptent ce genre de requetes couteuses!

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Citation Envoyé par ted the Ors
    ...
    Disons que c'est difficilement maintenable et pas très propre...J'ai pris un exemple avec 3 lignes et 3 données mais imaginons rien que s'il s'agit de 100 lignes cela génére beaucoup de lignes de codes...
    De plus, je doute que les DBA acceptent ce genre de requetes couteuses!
    C'est vrai que c'est sans doute mieux d'un point de vue COBOL.
    Mais d'un strict point de vue DB2 ça ne change rien du tout sur la performance des requêtes. Les deux façons de faire sont parfaitement identiques pour DB2.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Citation Envoyé par Luc Orient
    C'est vrai que c'est sans doute mieux d'un point de vue COBOL.
    Mais d'un strict point de vue DB2 ça ne change rien du tout sur la performance des requêtes. Les deux façons de faire sont parfaitement identiques pour DB2.
    Ben j'en parlerai à mon DBA! !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Le soucis c'est que j'ai cela à la compilation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "HVA1" was not a uniquely defined name.  The definition to be
    used could not be determined from the context.  The reference to the name
    was discarded.
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Expected a reference-modification specification but found ")".  The
    "MOVE" statement was discarded.
    et ce pour les 3 variables HVA1 HVA2 HVA3



  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Ok j'ai compris...

    En fait, j'utilisais la mauvaise variable...
    j'ai suivi le tuto de cette page du site

    on peut trouver le code suivant
    Code : 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
     
     WORKING-STORAGE SECTION.
    * l'indice pour la boucle
     01  I             PIC 9(1).
     
    * le tableau pour l'affichage des jours
     01  INIT-TABLE-JOUR.
          05  FILLER  PIC  X(8)  VALUE 'LUNDI'.
          05  FILLER  PIC  X(8)  VALUE 'MARDI'.
          05  FILLER  PIC  X(8)  VALUE 'MERCREDI'.
          05  FILLER  PIC  X(8)  VALUE 'JEUDI'.
          05  FILLER  PIC  X(8)  VALUE 'VENDREDI'.
          05  FILLER  PIC  X(8)  VALUE 'SAMEDI'.
          05  FILLER  PIC  X(8)  VALUE 'DIMANCHE'.
     01  TABLE-JOUR  REDEFINES  INIT-TABLE-JOUR.
          05  JOUR    PIC  X(8)  OCCURS  7.    
     
     PROCEDURE DIVISION.       
         PERFORM VARYING I FROM 1 BY 1 UNTIL I > 7
             DISPLAY JOUR (I) NB-VOTANT (6, I, 1)
         END-PERFORM.
    qu'il faudrait remplacer apparement par

    Code : 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
    WORKING-STORAGE SECTION.
    * l'indice pour la boucle
     01  I             PIC 9(1).
    
    * le tableau pour l'affichage des jours
     01  INIT-TABLE-JOUR.
          05  FILLER  PIC  X(8)  VALUE 'LUNDI'.
          05  FILLER  PIC  X(8)  VALUE 'MARDI'.
          05  FILLER  PIC  X(8)  VALUE 'MERCREDI'.
          05  FILLER  PIC  X(8)  VALUE 'JEUDI'.
          05  FILLER  PIC  X(8)  VALUE 'VENDREDI'.
          05  FILLER  PIC  X(8)  VALUE 'SAMEDI'.
          05  FILLER  PIC  X(8)  VALUE 'DIMANCHE'.
     01  TABLE-JOUR  REDEFINES  INIT-TABLE-JOUR.
          05  JOUR    PIC  X(8)  OCCURS  7.    
    
     PROCEDURE DIVISION.       
         PERFORM VARYING I FROM 1 BY 1 UNTIL I > 7
             DISPLAY TABLE-JOUR (I) NB-VOTANT (6, I, 1)
         END-PERFORM.
    Cela dépend peut etre du compilateur, du site, etc...Je ne sais pas...

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Citation Envoyé par ted the Ors
    Ok j'ai compris...

    En fait, j'utilisais la mauvaise variable...
    ...
    Nous quittons le monde de DB2 pour rentrer dans celui du COBOL.

    Ta question, si question il y a, est peut être à poser dans le forum consacré à ce langage ...

  11. #11
    Membre émérite 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
    Par défaut
    Bonjour,

    merci pour avoir détécter cette erreur que je vais corriger rapidement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     PROCEDURE DIVISION.       
         PERFORM VARYING I FROM 1 BY 1 UNTIL I > 7
             DISPLAY TABLE-JOUR (I) NB-VOTANT (6, I, 1)
         END-PERFORM.
    .

Discussions similaires

  1. [performances] 40 requêtes INSERT
    Par Tukan dans le forum Requêtes
    Réponses: 6
    Dernier message: 15/10/2006, 14h16
  2. Quel SGBD pour de bonnes performances en Insert ?
    Par arthix dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 03/05/2006, 17h48
  3. Réponses: 2
    Dernier message: 23/02/2006, 12h23
  4. probleme de performance dans l'insertion
    Par chafikha dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/08/2005, 07h59
  5. performance delete/insert vs update
    Par Dionisos dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/08/2005, 18h23

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