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 28/11/2011, 12h52   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 45
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 45
Points : 11
Points : 11
Par défaut Petit problème de procédure stockée

Bonjour à tous, je sillonne le site et internet et je trouve pas de réponse, pourtant ça me semble tout con :
J'essaye de faire une procédure stockée qui me renvoie plusieurs lignes et appeler cette proc sans y arriver.
Pour simplifier ma proc est du style :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE PROCEDURE ma_proc (
    date_du date NOT NULL,
    date_au date NOT NULL)
returns (
    employe varchar(100),
    colonne varchar(50),
    valeur numeric(9,2))
AS
BEGIN
   SELECT employe, colonne, valeur
   FROM une_table
   INTO :employe, :colonne, :valeur;
   suspend;
END
La procédure se compile correctement, mais pas moyen de l'appeler. Quand je l'appel, que je fasse ça :

Code :
SELECT * FROM ma_proc('2011-01-01','2011-12-31')
ou ça :
Code :
EXECUTE PROCEDURE ma_proc('2011-01-01','2011-12-31')
J'ai un message d'erreur : "multiple rows in singleton select". Je suppose donc que ma procédure est mal écrite et n'attends qu'un seul enregistrement en retour, mais je trouve pas comment renvoyer plusieurs ligne. J'essaye de remplacer suspend par exit ça marche pas non plus.

Merci d'avance.

P.S : Je pense que la FAQ firebird (qui rend des services énormes) pourrait être un peu plus étoffée concernant l'écriture et l'utilisation des procédures stockées et des triggers. En donnant un exemple d'écriture d'une procédure stockée toute con pour juste avoir la syntaxe.
jesusnavas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 13h07   #2
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 45
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 45
Points : 11
Points : 11
Pardon, j'ai trouvé la réponse moi même... J'étais découragé alors j'ai fait appel à vous et juste après j'ai enfin trouvé une réponse sur un forum anglais.

Donc pour info si qq'un trouve ce sujet et est intéressé, il faut une petite boucle autour du suspend, le corps de la proc deviens donc :

Code :
1
2
3
4
5
6
FOR
   SELECT employe, colonne, valeur
   FROM une_table
   INTO :employe, :colonne, :valeur
DO
   suspend;
Le reste est correct apparemment !!!
Je me remercie (lol) et m'excuse de vous avoir dérangé pour rien.

Bonne semaine à toute la communauté développez.com !!!
jesusnavas 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 07h58.


 
 
 
 
Partenaires

Hébergement Web