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 18/07/2011, 16h23   #1
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Par défaut Vue vers PS, problème incompréhensible !

Salut

ce bout de code fonctionne à merveille dans la vue mais quand je le mets dans une PS j'ai une erreur.

voici le code en question :
Code :
1
2
3
4
case when
            (tb_process.nh4_sortie IS NULL) then '/'
            else tb_process.nh4_sortie*tb_process.volume_mj_sortie/1000
        end,
l'erreur engendrée lors de l'exécution de la PS est
Citation:
Overflow occured during data type conversion.
conversion error from string "/".
une idée svp ?
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 16h45   #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
Bonjour,

Je dirais que la variable dans lequel vous renvoyez le résultat est de type numeric ou decimal ou float et donc quand le CASE renvoi le caractère '/', ca ne lui plait pas.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 17h02   #3
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Citation:
Envoyé par Barbibulle Voir le message
Bonjour,

Je dirais que la variable dans lequel vous renvoyez le résultat est de type numeric ou decimal ou float et donc quand le CASE renvoi le caractère '/', ca ne lui plait pas.
Merci Barbibulle
c'était ça effectivement mais pourquoi dans la requête ça passe malgré que le type de base du champ est numérique !!!

comment puis-je le forcer dans la PS à prendre '/' quand c'est null

merci encore
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 17h25   #4
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
Code :
1
2
3
4
case when
            (tb_process.nh4_sortie IS NULL) then '/'
            else tb_process.nh4_sortie*tb_process.volume_mj_sortie/1000
        end,
Le type renvoyé par la requete est char ou varchar, c'est pour ca que ca fonctionne.

Si le but de cette PS c'est de faire de la présentation de résultat, utilisez un varchar(xx). Si ce résultat vous souhaitez pouvoir l'utiliser dans d'autre calcul je vous déconseille de procéder ainsi.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 17h27   #5
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Salut

Ton paramètre de sortie étant de type DECIMAL il ne peut accepter un CHAR ("/" dans ton cas).

Une solution: renvoie -1 au lieu de "/", et c'est au niveau de l'application que tu adaptes l'affichage des données.

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 17h33   #6
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Citation:
Envoyé par Cl@udius Voir le message
Salut

Ton paramètre de sortie étant de type DECIMAL il ne peut accepter un CHAR ("/" dans ton cas).

Une solution: renvoie -1 au lieu de "/", et c'est au niveau de l'application que tu adaptes l'affichage des données.

@+ Claudius
Salut Cl@udius, effectivement c'est ce que j'ai fais.
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 10h25   #7
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Salut

dans le même état d'esprit, j'ai une autre requête qui donne le résultat souhaité mais quand je l'ai convertis en PS j'ai eu une erreur de type "arithmetic overflow or division by zero has occured".

voici mon code :
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
29
30
31
32
33
34
35
36
37
38
39
BEGIN
    FOR
    SELECT 
        d.date_bilan,
        c.nom_unite,
        b.nom_step,
        d.volume_mj_sortie* d.nombre_jour_reel AS Vol_Traite_Mois,
        a.energie_active,
        a.energie_reactive,
        a.pma,
        a.rap_puissance,
        a.montant_facture,
        a.energie_active / (cast(nullif(d.volume_mj_sortie,0) AS integer) * d.nombre_jour_reel) AS Taux_consommation
    FROM tb_energie a
        INNER JOIN tb_step b ON (a.code_step = b.code_step)
        INNER JOIN tb_unite c ON (b.code_unite = c.code_unite)
        INNER JOIN tb_process d ON (b.code_step = d.code_step)
 
    WHERE 
        (
            (a.date_mois =:DATE_BILAN_SAISIE AND d.date_bilan =:DATE_BILAN_SAISIE )
        )
 
    INTO
        :DATE_BILAN,
        :NOM_UNITE,
        :NOM_STEP,
        :VOLUME_TRAITE_MOIS,
        :ENERGIE_ACTIVE,
        :ENERGIE_REACTIVE,
        :PMA,
        :RAP_PUISSANCE,
        :MONTANT_FACTURE,
        :TAUX_CONSOMMATION
DO
  BEGIN
    suspend;
  END
END
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 11h36   #8
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
Division par zéro :
Code :
a.energie_active / (cast(nullif(d.volume_mj_sortie,0) AS integer) * d.nombre_jour_reel) AS Taux_consommation
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 11h55   #9
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Citation:
Envoyé par TryExceptEnd Voir le message
Division par zéro :
Code :
a.energie_active / (cast(nullif(d.volume_mj_sortie,0) AS integer) * d.nombre_jour_reel) AS Taux_consommation
je ne crois pas que j'ai une division par zéro car la fonction nullif renvoie null quand le volume vaut 0 et dans la requête sa passe.
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 12h19   #10
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
Citation:
Envoyé par Just-Soft Voir le message
je ne crois pas que j'ai une division par zéro car la fonction nullif renvoie null quand le volume vaut 0 et dans la requête sa passe.
Ah oui, désolé pour la précipitation, ça doit être donc un débordement du a un type de colonne qui ne supporte pas le résultat d'une multiplication.
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 07h03   #11
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Bonjour !

je viens de trouver l'erreur, il s'agit de la taille d'une variable de type varchar bizarre que FB ne tronque pas le résultat mais le signal comme erreur arithmétique ou de conversion
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft 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 13h14.


 
 
 
 
Partenaires

Hébergement Web