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 régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    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 éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Oui, je crois qu'en 8i il faut passer par le paquetage DBMS_LOB.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    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 460
    Points : 8 074
    Points
    8 074
    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;
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    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 460
    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 460
    Points : 8 074
    Points
    8 074
    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'.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    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