OCILib: 3.9.3
Oracle client/serveur: v8.1
Système: Windows 7 / VS2010
Bonjour,
Pour un champ NUMBER dans une DB, je récupère la valeur en appelant OCI_GetInt. Tout se passe bien jusqu'à ce que j'arrive sur un champ qui a la valeur -2147483648 (0x80000000) (je dois cleaner la DB de ce genre de valeur venant manifestement de variable pas initialisée). L'erreur Oracle signifie que cette valeur est trop grande pour tenir dans un int (plus exactement un buffer de 4 octets), si j'ai bien compris.
Je suis assez surpris car:
- cette valeur tient dans un int
- dans une autre appli qui utilise directement OCI, OCIStmtFetch retourne bien OCI_SUCCESS, alors que dans le OCIDefineByPos on passe bien sizeof(int) en taille de buffer et SQLT_INT pour le type de donnée.
En testant un OCI_GetBigInt, je récupère sans erreur un int64 qui vaut 0xffffffff80000000 (= -2147483648).
Je n'ai rien vu de louche en debuggant jusqu'à arriver à l'appel de la fonction OCI
OCINumberToInt(con->err, data, size, sign, value)
qui provoque l'erreur Oracle.
Il n'y a que très peu de documentation sur cette erreur, et de personne ayant rencontré ce genre de problème. Même s'il me suffit de récupérer dans un int64, ça me gène de devoir bidouiller pour faire du ménage justement...
A votre bon coeur Messieurs Dames! Et joyeuses fêtes
Partager