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 :

oracle 8.1.7, CLOB et requete avec like


Sujet :

Oracle

  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Par d�faut oracle 8.1.7, CLOB et requete avec like
    Bonjour,

    Ceci est plus une demande de confirmation qu'une reelle question.

    J'ai une table comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     TAB_ID                                     NOT NULL NUMBER(11)
     NAME                                      NOT NULL VARCHAR2(255)
     DEFINITION                                         CLOB
    et quand je souhaite faire une requete de ce type, ca ne marche pas :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    select * from tab where definition like 'Test%'
                           *
    ERROR at line 1:
    ORA-00932: inconsistent datatypes
    pourtant dans la doc Oracle il est dit que :
    The BLOB datatype stores unstructured binary large objects. BLOBs can be thought of as bitstreams with no character set semantics. BLOBs can store up to 4 gigabytes of binary data.
    BLOBs have full transactional support.
    J'ai mal compris alors le full transactional support qui ne correspond pas a ce que je pense, c'est a dire que le clob peut etre utilise comme n'importe quel autre type Oracle (comme une extension du type varchar2(4000)).
    Il est bien precise pour le type LONG que on ne peut pas l'utiliser dans une clause WHERE mais rien de tel dans la doc concernant le type CLOB
    LONG columns cannot appear in certain parts of SQL statements:
    * WHERE clauses, GROUP BY clauses, ORDER BY clauses, or CONNECT BY clauses or with the DISTINCT operator in SELECT statements
    Il n'est donc pas possible d'utiliser une colonne de type CLOB dans une clause WHERE en 8.1.7 (sauf en contournant le probleme avec la mise en place d'index interMedia Text )?
    Mais ceci est possible dans les versions 9i d'Oracle ?

    Merci

  2. #2
    Expert confirm�
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par d�faut
    Oui, je crois qu'en 8i il faut passer par le paquetage DBMS_LOB.

  3. #3
    R�dacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    D�cembre 2002
    Messages
    3 461
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 3 461
    Par d�faut
    Bonjour

    Je confirme qu'en 9i, votre syntaxe est accept�e.

    En 8i, le LIKE n'est pas utilisable sur un CLOB, et il faut utiliser � la place la fonction DBMS_LOB.INSTR

    Votre syntaxe devient alors :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    select * from tab where DBMS_LOB.INSTR(definition, 'Test') >0;

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Par d�faut
    Citation Envoy� par Pomalaix
    Je confirme qu'en 9i, votre syntaxe est accept�e.
    Bonjour Pomalaix, merci pour cette confirmation

    Citation Envoy� par Pomalaix

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    select * from tab where DBMS_LOB.INSTR(definition, 'Test') >0;
    ca marche mais je ne peux pas utiliser de caractere % pour effectuer des recherches approximatives. On ne peut donc pas veritablement recreer le LIKE mais seulement la condition stricte d'egalite -> where clob = 'valeur'

    Je suis en train de tester le portage d'une base de donnees de PostgreSQL vers Oracle et Oracle 8i semble vraiment trop limitant et ne me facilite pas la tache
    J'ai en effet d'autres problemes, il existe des outils d'insertions et de visualisation developpes autour de l'architecture PostgreSQL, je ne peux pas tout/trop redevelopper/modifier (et perdre ainsi toute la richesse des mises a jour et debuggages de la communaute presente autour de ce projet).
    Les insertions ne fonctionnent pas pour le moment a cause de ce probleme de requete sur les CLOB en 8i, et il y aura aussi des modifications a apporter aux scripts d'interface qui utilisent des requetes SQL ANSI (8i ne reconnaissant pas cette syntaxe, 9i sera la solution la moins couteuse pour moi).

  5. #5
    R�dacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    D�cembre 2002
    Messages
    3 461
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 3 461
    Par d�faut
    Citation Envoy� par fsapet
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    select * from tab where DBMS_LOB.INSTR(definition, 'Test') >0;
    ca marche mais je ne peux pas utiliser de caractere % pour effectuer des recherches approximatives. On ne peut donc pas veritablement recreer le LIKE mais seulement la condition stricte d'egalite -> where clob = 'valeur'
    INSTR indique simplement si la cha�ne recherch�e figure quelque part dans le LOB. Ca correspond donc � un '%chaine%'.
    De plus il y a des param�tres optionnels (voir la doc). Si vous les utilisez, c'est beaucoup plus riche qu'un simple '%blabla'.

  6. #6
    Membre �prouv�
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Par d�faut
    Ok,

    Merci pour tout,

    J'approfondie mes recherches

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [SQL] requete avec LIKE
    Par Space Cowboy dans le forum PHP & Base de donn�es
    R�ponses: 7
    Dernier message: 07/08/2007, 11h03
  2. requete avec like
    Par yasmine* dans le forum Requ�tes
    R�ponses: 3
    Dernier message: 07/04/2007, 22h07
  3. [MySQL] requete avec LIKE
    Par hamham dans le forum Langage SQL
    R�ponses: 6
    Dernier message: 10/01/2007, 15h22
  4. Requete avec LIKE et IN
    Par eowene dans le forum Langage SQL
    R�ponses: 4
    Dernier message: 10/01/2007, 09h09
  5. Requete avec LIKE
    Par Eome dans le forum Langage SQL
    R�ponses: 1
    Dernier message: 31/08/2006, 21h37

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