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 28/05/2007, 19h30   #1
Membre du Club
 
Inscription : juillet 2006
Messages : 153
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 153
Points : 40
Points : 40
Envoyer un message via MSN à ted the Ors
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 :
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 :
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 :
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 :
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
ted the Ors est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 20h38   #2
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
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 098
Points : 1 707
Points : 1 707
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
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 21h27   #3
Membre du Club
 
Inscription : juillet 2006
Messages : 153
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 153
Points : 40
Points : 40
Envoyer un message via MSN à ted the Ors
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 :
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 :
1
2
3
WS-HVA1 PIC X(1).
WS-HVA2 PIC X(2).
WS-HVA3 PIC X(3).
ted the Ors est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 21h32   #4
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
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 098
Points : 1 707
Points : 1 707
Oui je pense que ça devrait marcher ...


Citation:
...
Le probleme c'est que je dois faire ces insertions de lignes sans passer par plusieurs "insert" (1 / lignes)...
Mais pourquoi donc ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 21h40   #5
Membre du Club
 
Inscription : juillet 2006
Messages : 153
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 153
Points : 40
Points : 40
Envoyer un message via MSN à ted the Ors
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!
ted the Ors est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 21h47   #6
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
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 098
Points : 1 707
Points : 1 707
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.
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 22h10   #7
Membre du Club
 
Inscription : juillet 2006
Messages : 153
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 153
Points : 40
Points : 40
Envoyer un message via MSN à ted the Ors
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! !
ted the Ors est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2007, 09h29   #8
Membre du Club
 
Inscription : juillet 2006
Messages : 153
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 153
Points : 40
Points : 40
Envoyer un message via MSN à ted the Ors
Le soucis c'est que j'ai cela à la compilation:

Code :
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 :
1
2
Expected a reference-modification specification but found ")".  The
"MOVE" statement was discarded.
et ce pour les 3 variables HVA1 HVA2 HVA3


ted the Ors est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2007, 09h42   #9
Membre du Club
 
Inscription : juillet 2006
Messages : 153
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 153
Points : 40
Points : 40
Envoyer un message via MSN à ted the Ors
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 :
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 :
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...
ted the Ors est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 22h00   #10
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
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 098
Points : 1 707
Points : 1 707
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 ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 09h52   #11
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Bonjour,

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

Code :
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.
.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse 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 19h49.


 
 
 
 
Partenaires

Hébergement Web