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

Oracle Discussion :

Probleme avec champ de type LONG


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Probleme avec champ de type LONG
    Bonjour a tous,

    Je suis sous Oracle 8i et j'ai un petit souci avec un champ de type LONG:
    j'ai une table test avec une colonne my_long de type long et j'essaye de faire une requete de ce genre:

    select * from test where my_long like '%toto%'

    et la oracle me retourne l'erreur suivante : ora-00932 : types de donnée incoherents.

    Quelqu'un a une idée pour contourner le problème sachant que je ne peux pas modifier le type de la colonne en question

    Merci d'avance,

    Youby

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Si la colonne est de type long, one ne peut pas faire de recherche de chaine.
    Du coup, la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from test where my_long like '%toto%'
    est invalide. Les types ne sont pas compatibles et puis vu que long, c'est des chiffres, meme si ca marchait, l n'y aurait aucun résultat !

    A ma connaissance, à part modifier le type de la colonne, il n'y a rien à faire.

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par hotkebab99
    et puis vu que long, c'est des chiffres
    Les long sont des chaines de caractères.

    Par contre Youby, si tu peux le faire, je te conseille de passer ta colonne en CLOB, là tu pourras faire des recherches sur ta colonne.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Aïe ! Gros mélange avec JAVA...désolé....


  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Merci pour vos réponses,

    Le problème est que je ne peux pas changer le type de la colonne, mais si il n'y a pas d'autre moyen pour effectuer une recherche sur ce type de colonne alors je vais tenter de convaincre le dba !!

  6. #6
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut
    Citation Envoyé par Youby
    Merci pour vos réponses,

    Le problème est que je ne peux pas changer le type de la colonne, mais si il n'y a pas d'autre moyen pour effectuer une recherche sur ce type de colonne alors je vais tenter de convaincre le dba !!
    si tu as un dba Oracle, il sera certainement te renseigner sur ce type de problème, il est un peu la pour ça ..

  7. #7
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Si ton DBA ne veut pas passer ta colonne en LOB, voici une solution que tu peux adapter :
    http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:665224430110
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  8. #8
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Points : 47
    Points
    47
    Par défaut
    J'ai eu de très gros soucis avec des LONG également (sans pouvoir changer le type, forcément ), je n'ai trouvé que deux solutions :

    ¤ Cloner le champs sous forme de CLOB dans une table table temporaire (avec la fonction to_lob)
    ¤ Utiliser une procédure stockée, en stoquant le résultat dans un varchar2(4000) avec un 'select into', ce qui pose des problèmes de perf, et de perte de donnée.

    Si cela peut t'aider...

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu peux faire du plsql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL> exec for r in ( select my_long from test ) loop if (r.my_long like '%toto%') then dbms_output.put_line(r.my_long); end if; end loop
    hello toto !

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par laurentschneider
    tu peux faire du plsql
    Je ne suis pas sûr que cette technique fonctionne quand ton long fais plus de 32760 caractères (limitation du long en PL/SQL)
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par plaineR
    Citation Envoyé par laurentschneider
    tu peux faire du plsql
    Je ne suis pas sûr que cette technique fonctionne quand ton long fais plus de 32760 caractères (limitation du long en PL/SQL)
    c'est juste, il s'agit bien d'une restriction, une chaine trop longue va retourner quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ORA-06502: PL/SQL: numeric or value error: Bulk Bind: Truncated Bind
    ORA-06512: at line 1
    mais tu peux quand même faire du plsql, seulement un peu plus évolué si tu as des longs LONG

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Je vais faire une petite fonction en attendant la modif de la colonne.
    Merci pour votre aide
    Youby

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire un champ oracle type long avec une requête ODBC
    Par guidav dans le forum Général VBA
    Réponses: 1
    Dernier message: 02/07/2011, 17h27
  2. Réponses: 4
    Dernier message: 09/06/2009, 14h20
  3. Réponses: 7
    Dernier message: 03/05/2007, 16h30
  4. Réponses: 1
    Dernier message: 25/09/2006, 10h18
  5. [stringtokenizer] probleme avec champs vides
    Par gege2mars dans le forum Langage
    Réponses: 9
    Dernier message: 30/06/2004, 08h25

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