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

SQL Firebird Discussion :

Plusieurs for select dans une PS


Sujet :

SQL Firebird

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    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.

    @+

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    tu veux dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Je veux dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    A y réfléchir à deux fois, les suspend me semblent inutiles, puisque la PS est appelé depuis un trigger.

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    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.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Salut

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Merci d'ajouter un sur les tags qui vous ont aidé

  8. #8
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    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.

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    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).

    @+

  10. #10
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    Très bien; mais pour parler seulement
    Pourquoi ça ne marche pas avec suspend
    Deux personnes n'apprennent pas, un arrogant et un timide.

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    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).

    @+

  12. #12
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    Très bien et merci pour tout le monde
    Deux personnes n'apprennent pas, un arrogant et un timide.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Le SUSPEND doit absolument n’être utilise que si la clause RETURNS est complétée

    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
    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 ...
    Merci d'ajouter un sur les tags qui vous ont aidé

  14. #14
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    Merci beaucoup Olivier; le sujet est devenu très riche avec ta participation.
    Deux personnes n'apprennent pas, un arrogant et un timide.

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

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. [MySQL-5.6] SELECTION DANS UNE TABLE AVEC PLUSIEURS RELATIONS
    Par glodybiss4 dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/10/2013, 12h34
  3. Plusieurs insertions (insert + select) dans une meme requête
    Par johnson95 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/09/2010, 15h30
  4. Réponses: 7
    Dernier message: 20/08/2007, 16h40
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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