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 25/10/2011, 20h38   #1
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 203
Points : 38
Points : 38
Par défaut erreur sur lancement de la procedure stockée

Bonjour,
J'ai créé une procédure stockée comme suit
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PROCEDURE XDATA_BY_SELECTED_VARIABLE (
    NAME Varchar(75),
    FILENAME Varchar(10) )
RETURNS (
    XDATA Float )
AS
BEGIN
  FOR SELECT  DATA
FROM DATA D INNER JOIN VARIABLES V ON (V.IDVARIABLE=D.IDVARIABLE)
INNER JOIN FILE F ON V.IDFILE=F.IDFILE WHERE v.NAME=:NAME AND F.NAME=:FILENAME
INTO xdata
do 
suspend;
END^
SET TERM ; ^
Quand j'exécute la procédure j'obitens un message d'erreur
Citation:
SQL Message:-802
Arithmetic overflow or division by zero has occured
Engine code:335544321
Engine Message:
arithmetic exception, numeric overflow, or string truncation string right truncation
Pourtant si j'exécute ma requête j'obtiens mes résultats. Le problème est peut être dû au deux inner join dans la requête car avec un exemple où j'enlève un des inner join la procédure fonctionne correctement.
Comment peut on ecrire cette procédure correctement?
Merci pour votre aide
pbatty1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 20h56   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Bonjour


C'est quand très dangereux des mots-clés comme nom de tables ou de colonnes.

en essayant ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROCEDURE XDATA_BY_SELECTED_VARIABLE (
    NAME Varchar(75),
    FILENAME Varchar(10) )
RETURNS (
    XDATA Float )
AS
BEGIN
  FOR SELECT  D.xxx
FROM DATA D 
     INNER JOIN VARIABLES V ON (V.IDVARIABLE=D.IDVARIABLE)
     INNER JOIN FILE F ON V.IDFILE=F.IDFILE 
WHERE v.NAME=:NAME AND F.NAME=:FILENAME
INTO :xdata
do 
suspend;
END^
SET TERM ; ^
dehorter olivier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 14h49   #3
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 203
Points : 38
Points : 38
j'ai apporté une modification dans mon code en rajoutant D.DATA pour le nom de champ dans select mais l'erreur persiste.
pbatty1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 08h22   #4
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 618
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 618
Points : 4 523
Points : 4 523
Les Tailles de NAME et FILENAMEsont elles correctes ?
xData est il bien déclaré ?

Quid si DATA=Null , un petit COALESCE(data,0.00) ou un CAST (DATA AS FLOAT) règle t'il le problème ?
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 01h03   #5
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 203
Points : 38
Points : 38
j'ai trouvé d'où venait le problème. j'ai declare ma variable filename en varchar(10) or que dans la table file name est en varchar(50). Je ne m'explique pourquoi ca affiche une erreur car en mettant varchar(45) à filename la procedure fonctionne.
pbatty1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 07h59   #6
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 618
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 618
Points : 4 523
Points : 4 523
Citation:
string truncation ,string right truncation
c'est ce qui m'a mis sur la piste lorsque j'ai posé la question , on a trop souvent tendance a ne regarder que la première partie du message
Citation:
Arithmetic overflow or division by zero has occured
et s'entêter sur une valeur numérique
Citation:
Je ne m'explique pas pourquoi ca affiche une erreur car en mettant varchar(45) à filename la procedure fonctionne.
cela dépend des données tu as 'la chance' de ne pas avoir de CHAR_LENGTH(NAME) > 45 .

Pour comprendre, rempli un 'NAME' avec 50 Char et ta procédure (pour peu que tu ais laissé ton FileName a 45)
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est actuellement 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 08h44.


 
 
 
 
Partenaires

Hébergement Web