Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 12/06/2011, 08h49   #1
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Par défaut Plusieurs for select dans une PS

Bonjour tout le monde;
Je ne sais pas est ce que c'est possible de faire plusieurs instruction suspend dans une procédure sotckée.
Exp:
Code :
1
2
3
4
5
6
7
8
 
 FOR SELECT CODE FROM AXES INTO :A do
   INSERT INTO POLITIQUES_AXES (Situation,AXE,Temps_attente,Pourcent_sat_part) VALUES(:new_situation,:A, 0, 71);
   suspend;
 FOR SELECT flotte FROM flottes INTO :f do
 INSERT INTO POLITIQUES_FLOTTES (Situation,Flotte,Deviation,Temps_retour,DELTA_R,Pourcent_compl,Pourcent_sat_glob)
 VALUES(:new_situation,:f, 10,5,1000,25,60);
 suspend;
Logiquement, ça doit exister; car j'ai besoin de faire plusieurs insertion lors d'une insertion dans une table;
J'appelle la procédure par le trigger after insert.
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 09h26   #2
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Salut

Bien-sûr c'est possible. Pas de limitation à ce niveau.
Par contre, il doit te manquer des begin..end avec les 2 instructions for select.

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 10h25   #3
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
tu veux dire :
Code :
1
2
3
4
5
6
7
begin
   FOR SELECT CODE FROM AXES INTO :A do    INSERT INTO POLITIQUES_AXES (Situation,AXE,Temps_attente,Pourcent_sat_part) VALUES(:new_situation,:A, 0, 71);    suspend;
end
begin
FOR SELECT flotte FROM flottes INTO :f do  INSERT INTO POLITIQUES_FLOTTES (Situation,Flotte,Deviation,Temps_retour,DELTA_R,Pourcent_compl,Pourcent_sat_glob)  VALUES(:new_situation,:f, 10,5,1000,25,60);  suspend;
end
Je l'ai essayer mais ça n'a pas marcher, je n'ai que la première for select qui est réalisé.
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 10h28   #4
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Je veux dire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 FOR SELECT CODE FROM AXES INTO :A do
 BEGIN
   INSERT INTO POLITIQUES_AXES (Situation,AXE,Temps_attente,Pourcent_sat_part) VALUES(:new_situation,:A, 0, 71);
   suspend;
 END
 FOR SELECT flotte FROM flottes INTO :f do
 BEGIN
  INSERT INTO POLITIQUES_FLOTTES (Situation,Flotte,Deviation,Temps_retour,DELTA_R,Pourcent_compl,Pourcent_sat_glob)
  VALUES(:new_situation,:f, 10,5,1000,25,60);
  suspend;
 END
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 10h32   #5
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
A y réfléchir à deux fois, les suspend me semblent inutiles, puisque la PS est appelé depuis un trigger.

Donc:
Code :
1
2
3
4
5
6
7
 
 FOR SELECT CODE FROM AXES INTO :A do
  INSERT INTO POLITIQUES_AXES (Situation,AXE,Temps_attente,Pourcent_sat_part) 
  VALUES(:new_situation,:A, 0, 71);
 FOR SELECT flotte FROM flottes INTO :f do
  INSERT INTO POLITIQUES_FLOTTES (Situation,Flotte,Deviation,Temps_retour,DELTA_R,Pourcent_compl,Pourcent_sat_glob)
  VALUES(:new_situation,:f, 10,5,1000,25,60);
Tout simplement.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 10h36   #6
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Merci merci merci;
Le problème est dans le suspend;
Il ne faut pas le mettre
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 11h56   #7
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Salut

si tu peux le mettre, mais il faut qu'il existe la clause RETURNS de la procedure stockée

Code :
1
2
3
4
5
6
7
8
9
10
CREATE OR ALTER PROCEDURE Ps_... (
    entree1   INTEGER,
   .....
  )
RETURNS (
    Sortie1 INTEGER,
    ...)
AS
 
...
Mais dans ton cas, comme l'indique claudius, il n'est pas utile
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 12h12   #8
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Merci olivier, mais je n'ai pas compris
J'ai vérifié que ça ne marche pas avec suspend et je ne vois pas comment returns peut rentrer dans le truc.
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 12h22   #9
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Re,

Pour parler simplement, Olivier précisait que:
Si un (ou plusieurs) paramètre en sortie: utilisation de suspend pour chaque ligne renvoyée
Si aucun paramètre en sortie: ne pas utiliser suspend (ce qui est le cas de ton exemple).

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 12h30   #10
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Très bien; mais pour parler seulement
Pourquoi ça ne marche pas avec suspend
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 12h33   #11
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Parce que ta PS n'a pas de paramètre en sortie, dès lors suspend ne peux pas fonctionner (donner quelle valeur et à quel paramètre ?: d'où l'erreur).

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 12h36   #12
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Très bien et merci pour tout le monde
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 12h40   #13
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Le SUSPEND doit absolument n’être utilise que si la clause RETURNS est complétée

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
CREATE OR ALTER PROCEDURE Ps_ ...RETURNS(A INTEGER, F INTEGER)
AS
BEGIN
   FOR
       SELECT Code
         FROM Axes
       INTO :A
   DO
   BEGIN
      INSERT INTO Politiques_Axes (Situation,
                                   Axe,
                                   Temps_Attente,
                                   Pourcent_Sat_Part)
      VALUES (:New_Situation,
              :A,
              0,
              71);
      SUSPEND;
   END
   FOR
       SELECT Flotte
         FROM Flottes
       INTO :F
   DO
   BEGIN
      INSERT INTO Politiques_Flottes (Situation,
                                      Flotte,
                                      Deviation,
                                      Temps_Retour,
                                      Delta_R,
                                      Pourcent_Compl,
                                      Pourcent_Sat_Glob)
      VALUES (:New_Situatio N,
              :F,
              10,
              5,
              1000,
              25,
              60);
      SUSPEND;
   END
END
La ca marche parce que le SUSPEND renvoie les valeurs de A et de F incluse dans le RETURNS. Si tu enlèves les SUSPEND ca marche aussi, mais pas de sens
Mais sans le RETURN (ton cas) tu envois quelque chose en sortie, mais la sortie n'est pas indiquée.
Pour utiliser une image : tu essayes de sortir d'une maison, mais tu as oublié de mettre des portes et des fenêtres ...
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 12h56   #14
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Merci beaucoup Olivier; le sujet est devenu très riche avec ta participation.
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h49.


 
 
 
 
Partenaires

Hébergement Web