IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces de programmation Oracle Discussion :

[OCILIB] Problème de TYPE de chaîne de caractères


Sujet :

Interfaces de programmation Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 8
    Points
    8
    Par défaut [OCILIB] Problème de TYPE de chaîne de caractères
    Bonjour,

    Je suis actuellement sur un projet assez complexe et j'aurai besoin d'aide concernant la commande OCI_GetColumnType().

    Après une connexion sur ORACLE_EXPRESS et un SELECT de ma table, j'utilise OCI_Resultset() pour travailler sur les données recueillies. Et j'aimerai connaître le type de ma chaîne de caractères dans chacune des colonnes sans avoir à faire une lecture des données et les identifier moi même. La commande OCI_GetColumnType() est parfaite (elle fait très bien sont job), c'est plus le tapage oracle qui me gène..

    Voici le topo:
    • OCI_GetColumnType() retourne un int (1, 2, 4 etc....) et chaque valeur correspond à un type de chaîne de caractères.
    • le type de chaîne de caractères sur Oracle_Express (et je présume que sur Oracle [xxy] c'est pareil) c'est qu'il a sa propre nomenclature... Exemple: NUMBERS regroupe les INT32,64, DOUBLE, etc...soit tout les types "chiffre"
    • La correspondance entre le retour de OCI_GetColumnType et le Type de chaîne de caractères n'est pas fournie (plutôt introuvable parcequ'elle doit forcément exister quelque part...). Ce que je veut dire c'est que je ne trouve pas où je pourrais savoir que par exemple : OCI_GetColumnType() renvoi 1 signifie que j'ai un type NUMBER.


    Ce que j'aimerai savoir (on y arrive enfin ) c'est:
    Est-il possible de recueillir le type de chaîne de caractère "non-oraclisé" a savoir INT, LONG, CHAR, STRING, etc...?
    Si NON, où puis-je trouver la correspondance du retour de OCI_GetColumnType() ?

    (J'ai besoin de ces données pour pouvoir les réutiliser dans une autre base de données afin de les transmettre et j'ai besoin de normaliser tout çà.... )

    Je vous remercie pour toute l'aide que vous m'apporterez!

    PS: si quelqu'un est déjà passé par là s'il peut m'aider je galère pas mal

    J'oubliais, je code sur Xcode (mac OS 10.7, compilateur gcc/g++) et sur VisualStudio2010 (XP) et j'utilise OCILIB 3.9.3.

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Salut,

    1 / Le type de retour de OCI_GetColumnType() est documenté. Il suffit de lire la documentation.... : OCI_GetColumnType()

    Voici un extrait :
    OCI_CDT_NUMERIC : short, int, long long, double
    OCI_CDT_DATETIME : OCI_Date *
    OCI_CDT_TEXT : dtext *
    OCI_CDT_LONG : OCI_Long *
    OCI_CDT_CURSOR : OCI_Statement *
    OCI_CDT_LOB : OCI_Lob *
    OCI_CDT_FILE : OCI_File *
    OCI_CDT_TIMESTAMP : OCI_Timestamp *
    OCI_CDT_INTERVAL : OCI_Interval *
    OCI_CDT_RAW : void *
    OCI_CDT_OBJECT : OCI_Object *
    OCI_CDT_COLLECTION : OCI_Coll *
    OCI_CDT_REF : OCI_Ref *
    2/ Si tu veux avoir le type extact sous forme de chaine de caractères (comme le résultat de la comamnde DESC de SQL*PLUS), tu peux utiliser OCI_ColumnGetFullSQLType()

    Morale de l'histoire : il suffit de lire la documentation et/ou le manuel....
    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

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour la réponse si rapide!

    Par contre j'ai dû mal m'exprimer.....j'ai bien lu la documentation (pas toute je l'accorde) et j'ai bien vu le type de retour documenté sur OCI_GetColumnType().

    OCI_ColumnGetFullSQLType() me semble être une bonne solution, mais je ne sais pas en avance qu'elle taille fera ma chaine en déchargement de données pour pouvoir allouer mon buffer (sauf si je l'utilise dans un buffer circulaire à taille fixe afin de lire tout le contenue de ma requête).

    Mais là n'est pas la question. Mon problème résidait sur le fait que lorsque j'ai un retour NUMBER (en l'occurrence "OCI_GetColumnType(col) = 1"), je ne sais pas si dans mes données c'est un INT, un SHORT ou autre type de "chiffre".
    (à moins de vérifier la précision et le scale si renseignés afin de déterminer par moi même le type, ce que fait OCI_ColumnGetFullSQLType(col) ou encore OCI_GetColumnSize(col)+OCI_GetColumnPrecision(col)+OCI_GetColumnName(col)).

    Pour un OCI_CDT_TEXT : dtext * on sait que dtext * correspond à un char * (documentation). Mais je n'ai pas trouvé pour NUMBER....

    Si il existe un moyen de passer de NUMBER à int, short, long long, etc. Je suis preneur! Sinon, je me débrouillerai avec une identification manuelle

    Encore merci pour l'aide

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/05/2007, 11h10
  2. Réponses: 10
    Dernier message: 19/09/2006, 10h44
  3. Différents types de chaînes de caractères
    Par mambo dans le forum Visual C++
    Réponses: 5
    Dernier message: 09/08/2006, 08h38
  4. [Configuration] problème de taille de chaînes de caractères
    Par Wormus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 21/10/2005, 14h55
  5. Problème pour exécuter une chaîne de caractères
    Par Pongo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo