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

SQL Oracle Discussion :

Clause Like et Blob > 4000 charactères


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Par défaut Clause Like et Blob > 4000 charactères
    Allo,

    Je cherche à chercher une string dans un BLOB à l'aide d'un LIKE, mais puisque mon champs est trop grand, j'ai une erreur ora-19011.

    J'essaie de trouver tous les xml(blob) qui ne se termine pas par </formulaire>.

    Ma commande était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from maTable t 
    where formulaire not like '%</formulairerecap>'
    .

    Quelqu'un a une autre approche à ce problème à part les regarder un par un à la main ?

    Merci!

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Les LOB ne supportent pas les opérations de recherche de type LIKE.

    Vous pouvez utiliser DBMS_LOB.INSTR pour faire des recherche sur la fin du LOB.
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    SQL> select * from v$version;
     
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
     
    SQL> drop table t;
     
    Table supprimée.
     
    SQL> set serveroutput on
    SQL>
    SQL> create table t(x int primary key, y clob);
     
    Table créée.
     
    SQL>
    SQL> insert into t values(1, '<bidon> ..</formulaire>. </bidon>');
     
    1 ligne créée.
     
    SQL> insert into t values(2, '<formulaire>....</formulaire>');
     
    1 ligne créée.
     
    SQL> insert into t values(3, '....</formulaire>.. </formulaire>');
     
    1 ligne créée.
     
    SQL>
    SQL> declare
      2  p number;
      3  l number;
      4  s varchar2(30) := '</formulaire>';
      5  begin
      6  for c in (select x, y from t)
      7  loop
      8   select dbms_lob.getlength(c.y) into l from dual;
      9   select dbms_lob.instr(c.y, s, l - length(s) , 1) into p from dual;
     10   if (p = 0)
     11   then
     12    dbms_output.put_line('LIGNE TROUVEE: x=' || c.x);
     13   end if;
     14  end loop;
     15  end;
     16  /
    LIGNE TROUVEE: x=1
     
    Procédure PL/SQL terminée avec succès.
     
    SQL> show errors
    Pas d'erreur.
    SQL>

  3. #3
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Si tu veux le faire directement dans une requête SQL, tu peux adapter le code de pifor comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select x, y
    from t
    where dbms_lob.instr(y, '</formulaire>', dbms_lob.getlength(y)-length('</formulaire>')) > 0

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Par défaut
    Allo,

    J'avais vu l'utilisation de dbms_lob sur un site, mais il semble que le package ne soit pas activé sur notre Oracle. En tout cas, merci pour l'info.

    Bonne journée,

    Phil

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

Discussions similaires

  1. clause LIKE avec 1 champ SQL
    Par tamishrim dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/05/2006, 18h30
  2. Requete SQL croisée avec la clause Like
    Par Orgied dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/03/2006, 16h36
  3. SQL Access: clause like?
    Par rapace dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/02/2006, 14h39
  4. performance clause like / starting with
    Par KRis dans le forum SQL
    Réponses: 2
    Dernier message: 20/01/2006, 14h42
  5. Probleme dans une clause like !
    Par adil dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/07/2003, 16h47

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