|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() |
Bonjour,
j'ai une erreur que je ne comprends pas, sous Firebird 2.5 je ne mets pas tout le code de la procédure, mais l'erreur ce trouve ici: Code :
"NOTE: avant IF (rownum_last:179 < cpt_all:180)" mais la comparaison des 2 valeurs (qui sont bien de type INTEGER toutes les deux) me génère une exception avec le sqlcode -802 ![]() je ne vois pas ce qu'y pose problème pour la comparaison... quelqu'un a une piste ? |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 213 ![]() |
pourquoi des execute statement ici ?
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#3 | ||||||
|
Membre du Club
![]() |
je n'ai peut être pas bien compris l'execute statement.
j'utilise execute statement principalement pour avoir l'insert directement dans la base, sans attendre la fin de la transaction... bref, pour mon problème, cela ne vient pas de la je pense. pour info, je viens de migrer de 2.1 en 2.5, je suis partie à partir d'une base vide creer avec flamerobin, puis en utilisant mes scripts de création de base. J'ai changé le charset en ISO8859_1 à la création de la base. en utilisant flamerobin et la requête: Code :
en passant par mon code C++ avec la librairie ibpp, je me retrouve avec l'exception 802, alors que la procédure se lance bien puisqu'il fait quelques traitements avant d'avoir l'erreur... avec ibpp, j'ai essayé 2 façon de l'écrire (dont je n'ai pas bien compris la différence non plus). Les 2 solutions lancent bien la procédure, mais finisse toutes les deux en exception... Code :
Code :
|
||||||
|
|
00
|
|
|
#4 | |||
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 213 ![]() |
Citation:
Citation:
bref commencez par supprimer votre execute statement qui ne sert à rien le code sera plus simple, plus lisible ensuite éventuellement utilisez WITH AUTONOMOUS TRANSACTION mais le fait que cela passe avec FR et pas avec votre code laisse penser à un mauvais encodage des données il faut vérifier votre chaine de connexion Citation:
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|||
|
00
|
|
|
#5 | ||||
|
Membre du Club
![]() |
merci Philippe de tes réponses.
pour les execute statement, je m'en sers pour ce genre de requête: Code :
sympa en tout cas les nouvelles options de execute statement, et la posibilité de faire des requêtes multi-base c'est bien cool sinon, pour mes petits problèmes, voici mes conclusions (qui peuvent être incorrecte...) : 1/ pas simple de déboguer en PSQL, car il traite des lignes à l'avance et génère plutôt l'exception... ex: mon problème décrit dans le 1er post, on a l'impression que c'est la comparaison du IF qui plante, alors que l'erreur était plus bas dans le code !! 2/ j'ai dis n'importe quoi... quand on sait pas écrire du code correctement... il précompile l'intérieur des chaînes dans certain cas !! ex: EXECUTE STATEMENT 'INSERT INTO T ( I, TXT, DAT ) VALUES ( 1, ''__ rdb$get_context(USER_TRANSACTION, hash#)'', current_timestamp )'; EXECUTE STATEMENT 'INSERT INTO T ( I, TXT, DAT ) VALUES ( 1, ''__ rdb$get_context(''USER_TRANSACTION'', ''hash#'')'', current_timestamp )'; la première ligne ne plante pas, la deuxième plante avec l'exception 104 !! 3/ j'ai l'impression qu'il y a une différence de traitement entre la v2.1 et la v2.5 dans la mémorisation d'une vue (à retester en v2.1 pour confirmation) dans mon script de création, la création de la vue est sous cette forme, avec le retour à la ligne après AS: Code :
Code :
SELECT SUBSTRING( RDB$VIEW_SOURCE FROM 1 FOR 32000 ) FROM RDB$RELATIONS WHERE RDB$VIEW_SOURCE IS NOT NULL |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com