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 :

[PL/SQL - Oracle 9i] CLOB et owa_pattern


Sujet :

Oracle

  1. #1
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut [PL/SQL - Oracle 9i] CLOB et owa_pattern
    Bonjour,

    Voilà ce que je souhaite faire :
    je veux traiter des chaînes de caractères de type CLOB puis les afficher dans une page web. Pour cela, le moyen le plus simple selon moi est d'utiliser des expressions réugulières.
    Ne disposant pas de la base Oracle 10G je me suis rabattu sur le package owa_pattern. Mais voilà, sur un CLOB, ce package ne me renvoi pas ce que je souhaite. Je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE
     strData CLOB := 'bonjour tout le monde' ;
    BEGIN
      owa_pattern.change( strData, 'tout le monde', 'à tous');
      htp.p( strData ) ;
    END;
    Tentez ce code dans une procédure, et vous verrez que le résultat affiché est une chaîne incompréhensible avec des caractères japonais.

    Comment expliquez vous ça, auriez vous une solution car j'ai vraiment besoin de ces expressions et je ne vois pas comment je pourrais faire.
    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
    Et à la seconde exécution ?

    avez-vous testé sur un VARCHAR2 ?
    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
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    sur un varchar2 pas de problème.
    Mais le soucis c'est que j'ai besoin d'utiliser un CLOB, car j'injecte au fur et à mesure du traitement un nombre indéterminé de caractères à cette variable.

  4. #4
    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
    et avec du NCLOB ?
    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

  5. #5
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut Re: [PL/SQL - Oracle 9i] CLOB et owa_pattern
    Citation Envoyé par rebolon
    Tentez ce code dans une procédure, et vous verrez que le résultat affiché est une chaîne incompréhensible avec des caractères japonais.
    Chez moi, ça marche !

  6. #6
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    GENIAL, ça marche !
    je vais regarder de suite à quoi correspond ce NCLOB car je ne connaissais pas du tout.

    Merci beaucoup en tout cas

  7. #7
    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
    Le NCLOB gère les caractères au format unicode.
    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

  8. #8
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    Merci

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    ca viens pas forcement du format (NCLOB ou CLOB) en fait c'est les packages HTML qui ne sont pas fait pour afficher des types CLOB

    En effet la procédure htp.print (par exemple) ne supporte pas plus de 32767 caractères

    Au dela il affichera un clob sous la forme de caractère chinois (j'ai déja eu le pb, et en fait c une limitation spécifié dans la doc)

    Donc par exemple dans ton code 3 solutions
    - Tu passes en NCLOB (mais bon ca changera pas grand chose lorsque tu atteindras les 32767 caractères)
    - Tu triches (tu fais htp.p(dbms_lob.substr(XXX)) Ca va enfait tronquer la chaine et vérifier la taille, si ta chaine fait moins de 4000 caractères alors la ton CLOB sera en fait du VARCHAR2 pour Oracle et sera donc affiché correctement, si cela fait plus (maxi 32767 caractères) ca passera aussi (limitation varchar2 du pl) mais plus ca va repartir en vrille

    - La solution que j'ai utilisé et qui fonctionne super, tu prend ton clob, tu le découpe en bloc de 32000 caractères que tu affiches au fur et a mesure.

    Je te racontes pas le temps que j'ai passé sur ce problème, ca ma meme amener à découvrir un nouveau bug Oracle mais qui ne sera pas corrigé en 9i mais seulement sur la 10g :'(

    Et ca m'a aussi permis de faire l'équivalent d'un dbms_lob.replace

  10. #10
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut Oups, j'avais pas vu ton dernier reply...
    Bon, alors j'ai arreté de bosser sur ce problème depuis la dernière fois.
    Mais je viens de faire un test de performance sur le package owa_pattern (parce que j'avais des doutes sur la rapidité du package) :

    soit le procédure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    PROCEDURE testOwa_pattern ( 
    p_contentValue IN VARCHAR2 DEFAULT NULL
    ) 
    IS
    strTest nclob := #DATA# ;
    begin
    	htp.p( length( strTest ) ) ;
    	owa_pattern.change( strTest, 'c', #TOREPLACE#) ;
    	htp.p( length( strTest ) ) ;
    end testOwa_pattern ;
     
    end pkg_test ;
    Dans #DATA# vous mettez environ 16000 caractères
    Dans #TOREPLACE# vous mettez environ 3000 caractères

    faites un test en appelant la procédure depuis votre navigateur préféré et ....
    après une longue attente ( > 15 secondes ) vous aurez droit à l'affichage.

    Il est donc assez ahurissant de voir que pour faire un traitement des plus simples on attende aussi longtemps.
    Imaginez maintenant si vous devez en plus faire des tests et autres traitement requiérant des expressions régulières. Et bien mieux vaut ne pas avoir à traiter de grosse chaine sinon c'est la misère.

    Bien sûr, si vous avez des solutions, je suis preneur (est ce que 10g est vraiment plus rapide sur ce point ?)

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

Discussions similaires

  1. [sql] [oracle] éliminer les doublons dans sum ?
    Par trungsi dans le forum Langage SQL
    Réponses: 14
    Dernier message: 04/03/2005, 12h29
  2. Réponses: 4
    Dernier message: 18/10/2004, 16h18
  3. Generer du xml via SQL(oracle) avec de l'asp
    Par jpg dans le forum XQUERY/SGBD
    Réponses: 6
    Dernier message: 03/08/2004, 12h36
  4. [SQL ORACLE] Soustraction de deux timestamps
    Par platinum07 dans le forum SQL
    Réponses: 34
    Dernier message: 02/07/2004, 10h42
  5. PL/SQL ORACLE (Record Dans un Varchar2)
    Par argoet dans le forum PL/SQL
    Réponses: 24
    Dernier message: 14/05/2004, 16h06

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