|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2004 Messages : 20 ![]() |
Salut,
j'ai un petit problème avec OCI_GetLastError et les requêtes paramétrées, j'initialise OCILIB avec Code C :
OCI_Initialize(NULL, NULL, OCI_ENV_THREADED | OCI_ENV_CONTEXT) J'ai fait l'essai en utilisant un handler pour la gestion des erreurs et je récupère bien l'erreur lors de l’exécution de la requête paramétrée. Quelqu'un aurait il une idée du problème ? Merci d'avance |
|
|
00
|
|
|
#2 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 366 ![]() |
Salut,
Petit exemple ?
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : décembre 2004 Messages : 20 ![]() |
Salut,
en gros (parce que la gestion de la connexion oracle est encapsulé dans d'autres classes ), j'ai : Code C :
Lorsque j'utilise OCI_Initialize(err_handler, NULL, OCI_ENV_THREADED | OCI_ENV_CONTEXT), l'erreur est bien catchée et rentre dans la fonction de gestion des erreurs err_handler. Pour information l'erreur que je récupère souvent dans err_handler correspond à ORA-01480 pourtant ma chaine de caractère possède bien le caractère de fin. |
||
|
|
00
|
|
|
#4 | ||||||
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 366 ![]() |
Je n'arrive pas a reproduire le soucis. avec une requete paramétrée, j'ai bien une error retournée par OCI_GetLastError() avec le code suivant...
SQL Code :
Code C :
output : Code :
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
||||||
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : décembre 2004 Messages : 20 ![]() |
Je viens de refaire un test en forçant le dépassement de capacité de la taille de la colonne pour une chaine de caractères mais toujours aucune remontée de l'erreur par le GetLastError alors qu'avec le handler je la récupère bien.
Je vais essayer de creuser un peu pour voir si il n'y a pas quelque chose que j'aurai mal fait |
|
|
00
|
|
|
#6 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 366 ![]() |
quelle version de OCILIB et d'Oracle utilises tu ?
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : décembre 2004 Messages : 20 ![]() |
Pour OCILIB c'est la toute dernière : 3.11.1
Pour ORACLE c'est : 11.2.0.2 |
|
|
00
|
|
|
#8 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 366 ![]() |
as tu essayé le code que j'ai posté ?
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : décembre 2004 Messages : 20 ![]() |
J'essaye de tester ça ce matin et je te tiens au courant, merci de ton aide.
EDIT: avec ton code ça fonctionne ... EDIT2: je pense avoir trouver mon soucis, après OCI_Execute je fais un OCI_GetSql pour pouvoir écrire dans mon log la requête, si j'enleve OCI_GetSql alors je récupère bien l'erreur avec OCI_GetLastError |
|
|
00
|
|
|
#10 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 366 ![]() |
donc souci résolu
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : décembre 2004 Messages : 20 ![]() |
Résolu oui mais j'aimerai bien récupérer ma requête pour l'afficher dans mon log, est ce que c'est normal que je ne puisse pas récupérer l'erreur après une OCI_GetSql ?
|
|
|
00
|
|
|
#12 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 366 ![]() |
OCI_GetLastError est comme la fonction windows GetLastError(), elle retourne une erreur si le dernier appel du caller thread a failé.
Le status erreur est reseté à chaque appel de l'api... Pourquoi utiliser un handler global et un handler contextuel ? Au pire je pourrai faire ne sorte que les fonctions OCI_ErrorXXXX() ne mettent pas à jour le flag d'erreur du caller threead... Je vais y reflechir pour la prochaine version de OCILIB....
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : décembre 2004 Messages : 20 ![]() |
Ok merci.
En fait j'utilise normalement que le GetLastError pour récupérer les erreurs, et comme aucune erreur n'était remontée avec les requêtes paramétrées alors que l’exécution renvoyait faux j'ai voulu tester avec un handler global et c'est là que je me suis aperçu du problème que j'avais. En attendant une éventuelle modification dans les version ultérieures d'ocilib je vais changer mon code pour récupérer la requête après la gestion de l'erreur. Encore merci pour ton aide |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com