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 :

Insérer le résultat d'un SELECT


Sujet :

SQL Firebird

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Points : 337
    Points
    337
    Par défaut Insérer le résultat d'un SELECT
    Salut à tous,

    Alors j'ai les tables suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE POSTES (
        INDEX_POSTE  SMALLINT NOT NULL,
        NOM_POSTE    VARCHAR(20) CHARACTER SET ISO8859_1 NOT NULL
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE LISTE_JOUEURS (
        INDEX_JOUEUR  INTEGER NOT NULL,
        NOM_JOUEUR    VARCHAR(100) CHARACTER SET ISO8859_1 NOT NULL,
        NUMERO        SMALLINT NOT NULL,
        NAISSANCE     DATE DEFAULT CURRENT_DATE NOT NULL,
        INDEX_POSTE   SMALLINT DEFAULT 0 NOT NULL,
        TAILLE        VARCHAR(5) CHARACTER SET ISO8859_1 NOT NULL,
        POIDS         VARCHAR(6) CHARACTER SET ISO8859_1 NOT NULL);
    J'insère mes joueurs comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Liste_Joueurs (Nom_Joueur,Numero,Naissance,Poste,Taille,Poids,MJ) VALUES ('Zidane','10','2004-10-21',??????,'1m85','80 kgs','24');
    Les ??? correspondent au champ Index_Poste. Seulement je récupère le nom du poste et pas son index (ex: Milieu de terrain).

    Je voudrais dans la requête d'insertion, qu'il aille me chercher le champ POSTES.INDEX_POSTE correspondant à POSTES.NOM_POSTE

    Comment je peux faire ça?

    J'avoue découvrir les procédures stockées, les UDF... et je ne sais pas ce qui peut m'aider à résoudre ce problème...

    Merci d'avance!

  2. #2
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut,

    Recupère via une requete l'INDEX_POSTE via NOM_POSTE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT INDEX_POSTE from POSTES where NOM_POSTE = :NOM_POSTE
    Ensuite tu fais ton insertion normalement dans LISTE_JOEURS
    Sinon, avec un PS, je ferais comme ceci :
    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
     
    CREATE PROCEDURE LISTE_JOUEUR_INSERT(
        NOM_JOUEUR    VARCHAR(100) , 
        NUMERO           SMALLINT, 
        NAISSANCE      DATE , 
        NOM_POSTE     VARCHAR(20), 
        TAILLE             VARCHAR(5), 
        POIDS             VARCHAR(6)
        )
    AS
    DECLARE VARIABLE IDXPOST SMALLINT;
    BEGIN
      Select INDEX_POSTE from POSTES where NOM_POSTE = :NOM_POSTE
      into :IDXPOST;
    INSERT INTO LISTE_JOUEURS  (
      NOM_JOUEUR,
      NUMERO,
      NAISSANCE,
      INDEX_POSTE,
      TAILLE,
      POIDS)
    VALUES
      :NOM_JOUEUR,
      :NUMERO,
      :NAISSANCE,
      :IDXPOSTE,
      :TAILLE,
      POIDS);
    Voilà.

    Je presume que INDEX_JOUEUR est alimenter automatiquement par un generateur dans un trigger

    Alors courage

    A+
    On progresse .....

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Points : 337
    Points
    337
    Par défaut
    Bon, j'ai créé la procédure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SET TERM ^ ;
     
    CREATE PROCEDURE RETURN_INDEX_POSTE (
        NPOSTE VARCHAR(20))
    RETURNS (
        INDEX_POSTE SMALLINT)
    AS
    BEGIN
    SELECT p.index_poste FROM "POSTES" p WHERE p.nom_poste = :NPoste INTO :INDEX_POSTE;
    SUSPEND;
    END
    ^
     
    SET TERM ; ^
    Que j'ai testé, et qui fonctionne bien.

    Maintenant je fais mon INSERT comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO "Liste_Joueurs" (Nom_Joueur,Numero,Naissance,Poste,Taille,Poids,MJ) VALUES
    ('Zidane','10','2004-10-23',RETURN_INDEX_POSTE('Ailier'),'1m85','80 kgs', '0');
    Mais ça marche pas, il me met:
    An error was found in the application program input parameters for the SQL statement.
    Dynamic SQL Error.
    SQL error code = -804.
    Function unknown.
    RETURN_INDEX_POSTE.
    pourtant la procédure existe bel et bien...

    Comment ça se fait ça?

  4. #4
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Essaie ma procedure et tu verras.

    Sinon, pour tester tu peux avec un interpreteur SQL executer la commande ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute procedure LISTE_JOUEUR_INSERT('ZIDANE', ......);
    Ca marche bien
    On progresse .....

Discussions similaires

  1. Insérer le résultat d'un select dans une table
    Par el_gringo16 dans le forum Débuter
    Réponses: 4
    Dernier message: 01/06/2010, 11h35
  2. Insérer le résultat d'un select
    Par Rom1984 dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/07/2007, 09h06
  3. INSERT avec valeur connue et résultat d'un SELECT...
    Par snoop dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 27/04/2005, 08h54
  4. Formater résultat d'un select.
    Par wilaya dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/04/2005, 15h38
  5. [Sybase] résultat d'un select dans une variable
    Par stoz dans le forum Sybase
    Réponses: 2
    Dernier message: 14/09/2004, 14h28

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