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 15/06/2004, 19h02   #1
Membre éprouvé
 
Avatar de rlgrand
 
Enseignant
Inscription : avril 2004
Messages : 432
Détails du profil
Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : avril 2004
Messages : 432
Points : 466
Points : 466
Par défaut Procédures stockées

Bonjour,

la procédure stockée suivante me donne des soucis.
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
 
SET TERM ^;
CREATE PROCEDURE PS_POINT_TOTAL(NUMERO_PARTIE INTEGER,NUMERO_DONNE INTEGER )
AS
DECLARE VARIABLE NUM_LICENCE CHAR(10);
DECLARE VARIABLE POINT_DONNE DECIMAL(2,1);
DECLARE VARIABLE POINT_POIGNEE DECIMAL(2,1);
DECLARE VARIABLE POINT_PETIT DECIMAL(2,1);
DECLARE VARIABLE POINT_TOTAL DECIMAL(2,1);
BEGIN
FOR SELECT POINT_DONNE,NUMERO_LICENCE
    FROM PS_POINT_DONNE(:NUMERO_PARTIE,:NUMERO_DONNE)
    INTO :POINT_DONNE,:NUM_LICENCE
    DO
    BEGIN
      SELECT POINT_PETIT
      FROM PS_POINT_PETIT(:NUMERO_PARTIE,:NUMERO_DONNE)
      WHERE NUMERO_LICENCE=:NUM_LICENCE
      INTO :POINT_PETIT;
      SELECT POINT_POIGNEE
      FROM PS_POINT_POIGNEE(:NUMERO_PARTIE,:NUMERO_DONNE)
      WHERE NUMERO_LICENCE=:NUM_LICENCE
      INTO :POINT_POIGNEE;
      POINT_TOTAL=POINT_DONNE+POINT_PETIT+POINT_POIGNEE;
      INSERT INTO RESULTAT VALUES(:POINT_TOTAL,:NUMERO_PARTIE,:NUMERO_DONNE,:NUM_LICENCE);
    END
END^
SET TERM ;^
Je la teste sur deux bases test identiques.
Dans un cas ç marche ( insertion correcte ) et dans l'autre cas elle m'indique le message d'erreur suivant :
"multiple rows in singleton select".
C'est sans doute le For select qui pose problème, mais comme je n'ai pas envie de tout changer.
Quelqu'un a-til une piste ?
Cela m'arrangerait bien car sous delphi, je n'arrive pas justement à l'executer.

Merci d'avance.
Kenavo
rlgrand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2004, 19h51   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Non l'erreur vient de
Code :
1
2
3
4
      SELECT POINT_PETIT 
      FROM PS_POINT_PETIT(:NUMERO_PARTIE,:NUMERO_DONNE) 
      WHERE NUMERO_LICENCE=:NUM_LICENCE 
      INTO :POINT_PETIT;
ou de :
Code :
1
2
3
4
      SELECT POINT_POIGNEE 
      FROM PS_POINT_POIGNEE(:NUMERO_PARTIE,:NUMERO_DONNE) 
      WHERE NUMERO_LICENCE=:NUM_LICENCE 
      INTO :POINT_POIGNEE;
Ces deux select doivent impérativement ne retourner qu'un enregistrement. Ce qui n'est pas le cas (dans la base qui pose probleme).

Donc soit vous modifiez vos select comme par exemple :
Code :
1
2
3
4
      SELECT sum(POINT_PETIT) 
      FROM PS_POINT_PETIT(:NUMERO_PARTIE,:NUMERO_DONNE) 
      WHERE NUMERO_LICENCE=:NUM_LICENCE 
      INTO :POINT_PETIT;
ou vous changez le critère de sélection :
Code :
1
2
3
4
5
      SELECT POINT_PETIT 
      FROM PS_POINT_PETIT(:NUMERO_PARTIE,:NUMERO_DONNE) 
      WHERE NUMERO_LICENCE=:NUM_LICENCE 
    AND XXXXX = :QQQQ ...
      INTO :POINT_PETIT;
Ou peut etre qu'un DISTINCT suffit...
Code :
1
2
3
4
      SELECT DISTINCT POINT_PETIT 
      FROM PS_POINT_PETIT(:NUMERO_PARTIE,:NUMERO_DONNE) 
      WHERE NUMERO_LICENCE=:NUM_LICENCE 
      INTO :POINT_PETIT;
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2004, 00h10   #3
Membre éprouvé
 
Avatar de rlgrand
 
Enseignant
Inscription : avril 2004
Messages : 432
Détails du profil
Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : avril 2004
Messages : 432
Points : 466
Points : 466
Par défaut distinct

Bonsoir,
merci pour le coup de pouce.
La solution avec le select m'a permis de compiler la procédure.
rlgrand 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 10h24.


 
 
 
 
Partenaires

Hébergement Web