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 16/08/2004, 16h22   #1
Membre confirmé
 
Inscription : février 2003
Messages : 311
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2003
Messages : 311
Points : 293
Points : 293
Envoyer un message via MSN à zoubidaman
Par défaut Insérer le résultat d'un SELECT

Salut à tous,

Alors j'ai les tables suivantes:

Code :
1
2
3
4
CREATE TABLE POSTES (
    INDEX_POSTE  SMALLINT NOT NULL,
    NOM_POSTE    VARCHAR(20) CHARACTER SET ISO8859_1 NOT NULL
);
Code :
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 :
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!
zoubidaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2004, 16h42   #2
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Salut,

Recupère via une requete l'INDEX_POSTE via NOM_POSTE
Code :
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 :
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 .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2004, 16h43   #3
Membre confirmé
 
Inscription : février 2003
Messages : 311
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2003
Messages : 311
Points : 293
Points : 293
Envoyer un message via MSN à zoubidaman
Bon, j'ai créé la procédure suivante:

Code :
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 :
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:
Citation:
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?
zoubidaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2004, 16h49   #4
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Essaie ma procedure et tu verras.

Sinon, pour tester tu peux avec un interpreteur SQL executer la commande ci dessous
Code :
1
2
 
execute procedure LISTE_JOUEUR_INSERT('ZIDANE', ......);
Ca marche bien
__________________
On progresse .....
Andry 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 22h10.


 
 
 
 
Partenaires

Hébergement Web