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 10/08/2004, 14h53   #1
Invité de passage
 
Inscription : août 2003
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 4
Points : 1
Points : 1
Par défaut Valeur NULL pour dates différentes entre IB et Firebird

Bonjour,

J'essaie, dans une procédure stockée, de passer une date en output... Certaines fois, il n'y a pas de date, donc j'aimerais bien mettre la valeur NULL ou une string vide.

En IB, je peux mettre une string vide mais pas la valeur NULL.
En Firebird, je peux mettre NULL mais pas la string vide.

Est-ce que quelqu'un connais un moyen unique pour que cela fonctionne sur les 2 types de bases ????

Merci d'avance !

Alex
blecalex4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 15h34   #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
Un parametre de retours ne peut être à la fois de type DATE et de type string (enfin quand vous parlez de string j'imagine que vous pensez VARCHAR ou CHAR, car string n'existe pas sous interbase ni sous firebird).

De plus je ne sais pas ce qui vous a ammené à cette conclusion, car il est tout à fait possible et ce dans les deux SGBD de renvoyer null pour un paramétre de sortie d'une PS et ce que le type de ce paramètre soit DATE ou CHAR ou VARCHAR ou autre ...
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 15h44   #3
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
Je comprends pas vraiment ou il est le problème.

D'après ce que tu dis, t'as une paramètre retour de type date qui peux très bien prendre la valeur null s'il n'y a pas de valeur (parv ex le resultat d'une select qui est vide).
Pour plus de clarté peux tu poster le code de ton ps ?

A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 15h53   #4
Invité de passage
 
Inscription : août 2003
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 4
Points : 1
Points : 1
Si je pose la question, c'est bien que j'ai un problème...

Bref...
blecalex4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 16h00   #5
Invité de passage
 
Inscription : août 2003
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 4
Points : 1
Points : 1
Oui, merci à Andry qui lui au moins essaie de m'aider !

En fait un des bout de mon code qui fait erreur est le suivant (en simplifié) :

Code :
1
2
3
4
 
SELECT '', LIBELLE, DEBIT, CREDIT, SOLDE
   FROM ECRITURES
    INTO :DATE_ECR, LIBELLE, DEBIT, CREDIT, SOLDE;
Ici, en Interbase 6, cela passe sans problème, par contre avec Firebird 1.5, j'ai le message d'erreur suivant :

Code :
1
2
 
conversion error FROM string ''''.
blecalex4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 16h04   #6
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
Citation:
Envoyé par blecalex4
Oui, merci à Andry qui lui au moins essaie de m'aider !

En fait un des bout de mon code qui fait erreur est le suivant (en simplifié) :

Code :
1
2
3
4
 
SELECT '', LIBELLE, DEBIT, CREDIT, SOLDE
   FROM ECRITURES
    INTO :DATE_ECR, LIBELLE, DEBIT, CREDIT, SOLDE;
Ici, en Interbase 6, cela passe sans problème, par contre avec Firebird 1.5, j'ai le message d'erreur suivant :

Code :
1
2
 
conversion error FROM string ''''.
Pas de quoi.
Sinon, je vois une erreur dans ton code
Code :
1
2
3
 
SELECT '', ...
    INTO :DATE_ECR ...;
Je ne comprends pas bien le '' dans ce select et en plus tu le reafecte à DATE_ECR que j'imagine l'une des paramètres retournées.
Est ce une erreur de frappe ?

A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 16h13   #7
Invité de passage
 
Inscription : août 2003
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 4
Points : 1
Points : 1
Non,

c'est en fait ce que je veux retourner, un varchar vide pour qu'il n'y ait pas de valeur de date...

Avec Interbase 6, cela s'affiche comme null dans l'onglet Results d'IBExpert.

Par contre avec Firebird 1.5, cela fonctionne si je mette NULL à la place de ''. Si je met '', cela ne fonctionne pas !
blecalex4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 16h18   #8
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
Et c'est koi l'interet du select alors si tu veux que DATE_ECR soit tjs null.
pourquoi ne pas affacté à DATE_ECR la valeur null.

A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 16h51   #9
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
Citation:
Envoyé par blecalex4
Si je pose la question, c'est bien que j'ai un problème...

Bref...
Je comprend bien et c'est bien la seule chose que je comprend, vous avez un probleme.

Seulement voilà faut il que vous fassiez un effort pour expliquer précisément votre probleme.

Car aucunne réponce ne peut être donnée au vu de votre premier message. Je n'ai donc fait que vous reprendre sur les imprecésions de votre description du probleme.

Voilà.

Maintenant si vous souhaitez être aidé et avoir des réponses interressantes ayez la politesse envers tous ceux qui passent du temps à aider les autres de bien décrire votre probleme.

Au vu des messages suivants je n'ai pas l'impression que vous faites des procédures stockées comme vous le dites dans votre premier message...

De plus Vous parlez de date puis après de string ?? quel est le rapport entre les deux sachant que string n'existe pas sous Interbase ?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2004, 17h13   #10
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
Citation:
Envoyé par blecalex4
Code :
1
2
3
4
 
SELECT '', LIBELLE, DEBIT, CREDIT, SOLDE
   FROM ECRITURES
    INTO :DATE_ECR, LIBELLE, DEBIT, CREDIT, SOLDE;
Code :
1
2
 
conversion error FROM string ''''.
C'est normal, simplement interbase était plus tolérant sur le casting de chaines de caractère en date.

Mais vous confondez chaine vide avec NULL, ce qui n' a rien à voir...
Faire ce que vous faites revient à laisser le SGBD à choisir à votre place la valeur qu'il va affecter ' ' n'est pas traductible en date donc il peux choisir 1 de générer une exeption (le choix de firebird) ou 2 de convertir en date et prendre la 1ere date possible (17 Novembre 1858) ou dernière possibilité mettre à NULL si c'est possible.

Donc autant décider vous meme de ce que vous allez mettre dans votre date...
Code :
1
2
SELECT NULL, .... FROM...
INTO :MA_DATE,...
Mais comme le fait remarqué Andry quel est l'interret de renvoyer en DUR toujours NULL ??
Et si vous êtes dans une procédure stockée pourquoi le mettre dans un select ? Un simple
suffisait.

Voilà une réponse un peu plus constructive.

En conclusion si vous avez que des réponses de mauvaises qualitées ou qui ne vous conviennent pas remettez vous en question a savoir si vous de votre coté vous avez bien décrit votre problême.

Cordialement

NB : sur mon interbase 6 le select suivant ne fonctionne pas :
Code :
SELECT cast('' AS date) FROM RBD$DATABASE;
Il génère bien une exception contrairement à ce que vous dites. J'ai du coup essayé dans une PS pour voir si le comportement est différent mais ce n'est pas le cas... J'essayerai sous firebird à l'occasion...
Barbibulle 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 19h49.


 
 
 
 
Partenaires

Hébergement Web