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

PL/SQL Oracle Discussion :

comment avoir plus de 4000 Char dans une variable CLOB?


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Par défaut comment avoir plus de 4000 Char dans une variable CLOB?
    Bonjour à tous,

    je suis confronté au probleme suivant. J´ai une requete SQL dans laquelle un champ de type CLOB comporte plus de 4000 caracteres(exactement 5332).
    Mais à l´appele de la requete il ne me ressort que 4000. C´est un select normal et j´utilise l´expresssion :

    DBMS_LOB.SUBSTR(bftext,4000,1) pour recuperer la variable mais ca limite à 4000. Avant cela, à la place de DBMS_LOB.SUBSTR on utilisait to_char(bftext) et ca nous renvoyait l´erreur :

    ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion

    Comment faire pr recuperer cette variable de plus de 4000 caracteres?

    La requete(la partie concernée puisque cette requete est sehr longue):

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
     
      select * from
                 (
     
                    select
     
     
                             case BFTCode
                             when 'PASCH' then
     
                                 'Histoire du '
                             else 
     
                               nvl(regexp_replace(DBMS_LOB.SUBSTR(bftext,4000,1), '- Examen realisé: \s+?([^'||v_Linebreak||']*)'||v_Linebreak||'.*$', '\1',1,1,'n'), 'Examen')
     
                                 ||' du '
                             end
                             ||
     
                             case BFTCode
                             when 'PASCH' then
                                 regexp_replace(
                                   regexp_substr(
                                     DBMS_LOB.SUBSTR(bftext,4000,1)
                                     -- DBMS_LOB.SUBSTR(bftext,4000,1)
                                     , ' - Date Examen:\s+\d\d\d\d\d\d\d\d'
                                     , 1, 1 
                                   )
                                   , ' - Date Examen:\s+(\d\d\d\d)(\d\d)(\d\d)', '\3.\2.\1' 
                                 )
     
                                 || ' - ' || regexp_replace(BFTitre, '\s+-$', '')
                             else 
                                 regexp_substr(
                                   regexp_substr(
                                     DBMS_LOB.SUBSTR(bftext,4000,1)
                                     , ' - Date Examen:\s+\d\d.\d\d.\d\d\d\d'
                                     , 1, 1  
                                   )
                                    , '\d\d.\d\d.\d\d\d\d'
                                 )
                             end
     
                             || v_Linebreak
     
                             || rpad('-',
                                     case BFTCode
                                     when 'RAD' then 48
                                     when 'PASCH' then 73
                                     else 43
                                     end
                                     , '-')||v_Linebreak
     
                             || replace(
                                  replace(
                                    replace(
                                      regexp_replace(
                                        regexp_replace(
                                          regexp_replace(
                                            rtrim(DBMS_LOB.SUBSTR(bftext,4000,1))
                                            , ' - Recommandation : .*', '', 1, 1, 'n')
                                          , ' - Date Examen:\s+[0-9.]{8,10}'||v_Linebreak, '')
                                        , '- Examen realisé: \s+?([^'||v_Linebreak||']*?)'||v_Linebreak, '',1,1,'n')
                                      , ' - Befundtext: '||v_Linebreak, '')
                                    , ' - Beurteilung: '||v_Linebreak, '')
                                  , '- Critiques: '||v_Linebreak, '')
     
                             || v_Linebreak RESULTAT
     
                        from bfbefind
     
                             join BFTBefindtyp on BFTRefnr = bftyp
                       where BFHoRefnr = p_HoRefnr
                         and BFStatus = 1 
                         and BFTCode in ('RAD', 'PASCH', 'ENDO', 'SONO', 'NSONO', 'EPU', 'NACHK', 'EK')
                    order by BFTCode, BFDate, BFAuftragsnr, BFTitre
                )
    Merci pour votre aide

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Par défaut
    Bonjour,

    Il faut que tu récupères le contenu de ton champ de type CLOB dans une varible de ce même type.

    Après tu peux effectuer tes divers traitements sur cette variable.

    http://download.oracle.com/docs/cd/B...4258/d_lob.htm

    oulalala je suis pas bien réveillé...
    j'avais cru voir 40 000

    Par contre je ne comprend pas bien ton problème...

    tu fais : BMS_LOB.SUBSTR(bftext,4000,1) => c'est normal que tu as 4000 caractères

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Par défaut
    merci j´ai lu le lien mais je ne vois tjrs pas comment je pourrais mettre le resultat dans une variabel (j´appele la requete dans un cursor et comme j´ai dit c´est une longue requete , il y a un UNION ALL SELECT *** qui suit celle que j´ai mise dans le message)

    merci

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Par défaut
    effectivement tu fais : DBMS_LOB.SUBSTR(bftext,4000,1) ne prend pas plus de 4000 en paramettre sinon on a un message d´erreur du genre:

    ORA-06502: PL/SQL: numeric or value error: character string buffer too small

    Comme j´ai dit avant j´avais pas du tout de reponse mais une erreur :

    ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion car on utilisais un to_char(bftext) à la place.

    Donc je cherche une alternative....

  5. #5
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    Ton CLOB fait plus de 32K ? Si je me souviens bien, les variables caractère PL/SQL peuvent contenir jusqu'à 32768 octets.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Par défaut
    Hi,

    ma variable bftext est declarée comme CLOB dans ma Table (BFTEXT CLOB). Je ne sais pas si il faut faire une autre declaration?

    J´utilise Oracle 11.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2013, 14h39
  2. Réponses: 4
    Dernier message: 11/09/2009, 15h07
  3. Réponses: 6
    Dernier message: 14/08/2008, 18h39
  4. Comment puis-je mettre un include dans une variable
    Par pierrot10 dans le forum Langage
    Réponses: 17
    Dernier message: 31/08/2006, 08h45
  5. [ImageMagick] Comment mettre plus qu'un graphique dans une page ?
    Par 12_darte_12 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 29/06/2006, 20h30

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