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 02/11/2004, 18h03   #1
Invité de passage
 
Inscription : novembre 2004
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 11
Points : 3
Points : 3
Envoyer un message via MSN à mabig
Par défaut pb avec UDF

bonjour,

Après avoir exécuté le script "IB_UDF.sql' sous IB6.0, je souhaite executer la requete :
"select SUBSTR('test',1,2) from MyTable where Cle=1", et j'ai toujours la même erreur : "Invalid request BLR at offset ...".

Pourtant, si j'utilise d'autres fonctions comme LTRIM, cela fonctionne correctement.


Une Idée ???
mabig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 18h27   #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
Lors de l'execution du script, il n'y a pas eut d'erreur ?

Essayer de redéclarer la fonction :
Code :
1
2
3
4
DECLARE EXTERNAL FUNCTION substr 
    CSTRING(80), SMALLINT, SMALLINT
    RETURNS CSTRING(80) FREE_IT
    ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 18h47   #3
Invité de passage
 
Inscription : novembre 2004
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 11
Points : 3
Points : 3
Envoyer un message via MSN à mabig
Non, aucune erreur à l'execution du script initial.

En redeclarant la fonction, j'ai le message d'erreur :
"DEFINE FUNCTION failed
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_9""
Mais ça doit être parce que n'avait pas fait le "drop external ..." avant.

Ne serait-ce par à cause du "FREE_IT" que je devrais affecter le résultat dans un variable ? (j'ai pas mal de pb avec la doc en anglais).
mabig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 19h02   #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
C'est quoi le message exact quand vous faites :

Code :
SELECT SUBSTR('test',1,2) FROM rdb$database
?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 19h11   #5
Invité de passage
 
Inscription : novembre 2004
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 11
Points : 3
Points : 3
Envoyer un message via MSN à mabig
réponse :
/*************************************************/
Invalid request BLR at offset 63
function SUBSTR is not defined
module name or entrypoint could not be found
Statement: select SUBSTR('test',1,2) from rdb$database
/*************************************************/


Si je fait la même chose dans la base de démo "data.gdb", cela fonctionne correctement. Le pb viendrait d'un paramètrage de la base différent ?
La base de démo est en sql dialect 1 et la mienne en 3 !?!
mabig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 19h18   #6
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 le free_it et le dialect n'ont rien à voir.

Avez vous essayé le
Code :
DROP EXTERNAL FUNCTION SUBSTR
suivit du
Code :
1
2
3
4
DECLARE EXTERNAL FUNCTION substr 
    CSTRING(80), SMALLINT, SMALLINT 
    RETURNS CSTRING(80) FREE_IT 
    ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';
?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 19h21   #7
Invité de passage
 
Inscription : novembre 2004
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 11
Points : 3
Points : 3
Envoyer un message via MSN à mabig
Oui, plusieurs fois mais rien n'y fait, toujours le même message d'erreur.

Je continue à chercher les différences entre les 2 bases ...
mabig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 19h26   #8
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
J'ai déclaré cette fonction sur une base de test et je n'ai pas ce probleme.

et si vous essayez :
Code :
1
2
3
4
DECLARE EXTERNAL FUNCTION MASUBSTR 
    CSTRING(80), SMALLINT, SMALLINT 
    RETURNS CSTRING(80) FREE_IT 
    ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';
puis

Code :
SELECT MASUBSTR('test',1,2) FROM rdb$database
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 19h31   #9
Invité de passage
 
Inscription : novembre 2004
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 11
Points : 3
Points : 3
Envoyer un message via MSN à mabig
ben ... ça fonctionne avec MaSubStr !?!

Pourquoi pas avec SubStr ???
mabig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 19h36   #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
Et bien je suppose qu'il y a eut un PB lors de la déclaration de substr.
Le drop n a pas l'air de faire completement de menage et donc l'erreur subsiste.

Je pense qu'un drop puis un backup/restore puis une redéclaration de substr devrait remettre tout ca dans l'ordre.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 19h57   #11
Invité de passage
 
Inscription : novembre 2004
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 11
Points : 3
Points : 3
Envoyer un message via MSN à mabig
Je n'arrive pas à restorer la base correctement mais la solution devrait être là ...
mabig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2004, 20h31   #12
Invité de passage
 
Inscription : novembre 2004
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 11
Points : 3
Points : 3
Envoyer un message via MSN à mabig
Bon, après une lamantable bataille de Backup/Restore, j'ai finalement trouvé qu'un table avait un champ Integer en not null, mais que certaines valeurs étaient à null. Pour information, IBConsole renvoie "0" à la place de null : pas cool
J'ai donc réussi, après avoir corrigé ce problème, le Backup/Restore, puis j'ai refait le test et celà fonctionne correctement.

MERCI BEAUCOUP.

Je tenais à te remercier pour ce formidable coup de pouce (j'espère que t'es payé pour ça ;-) ), sinon, j'adore les mecs passionné comme toi.
Quoi qu'il en soit, encore merci et bravo pour le coup de pouce et aussi pour la rapidité des réponses.
mabig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2004, 14h50   #13
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 mabig
j'espère que t'es payé pour ça
Non c'est du bénévolat. Personne n'est payé ici pour répondre aux questions ou pour gérer le site/forum. Les pubs servent uniquement à payer les frais d'hébergement.

Mon salaire est donc constitué uniquement des remerciements des personnes que j'aide. Parfois il a de mauvais payeurs mais ce n'est pas votre cas .
Bon courage pour la suite.
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 21h50.


 
 
 
 
Partenaires

Hébergement Web