Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 11h19   #1
alex_972
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 60
Points : 18
Points : 18
Par défaut Generer un CLOB a partir d'une table de VARCHAR2

Bonjour,

Je cherche a stocker une page HTML (rapport ASH) dans une colonne CLOB pour ensuite l'afficher dans un pop up dans APEX.

Pour ce faire, j'ai cree une table temporaire dans laquelle j'insere le rapport :
Code :
1
2
3
4
CREATE GLOBAL TEMPORARY TABLE gtt_report (OUTPUT VARCHAR2(4000)) ON COMMIT PRESERVE ROWS;
 
INSERT INTO gtt_report
SELECT * FROM TABLE(dbms_workload_repository.ash_report_html(1485633966, 1, SYSDATE-30/1440, SYSDATE-1/1440));
Ensuite, je tente de generer mon CLOB a partir de ma table de varchar2 :
Code :
CREATE TABLE test_clob (c_clob CLOB);
Code :
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
 
DECLARE
  l_clob CLOB;
 
  CURSOR output IS
     SELECT output FROM gtt_report;
 
BEGIN
 dbms_lob.createtemporary(l_clob, TRUE);
  dbms_lob.open(l_clob, dbms_lob.lob_readwrite);
 
 
     FOR OUTPUT_rec IN output
       LOOP
 
         DBMS_LOB.writeappend(l_clob,LENGTH(OUTPUT_rec.OUTPUT),OUTPUT_rec.OUTPUT);
 
       END LOOP;
 
    dbms_lob.close(l_clob);
 
    INSERT INTO test_clob (c_clob) VALUES (l_clob);
 
    COMMIT;
 
    dbms_lob.freetemporary(l_clob);
 
  END;
Cette methode fonctionne si je ne depasse pas le cache de 4000 caracteres. Apres j'obtiens cette erreur :
Citation:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.DBMS_LOB", line 1146
ORA-06512: at line 27
Je n'arrive pas bypasser cette limitation. Sauriez vous comment faire ?

(Si vous avez une methode plus simple pour stocker mon rapport ASH dans une table, je suis egallement preneur)
alex_972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 11h35   #2
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 104
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 4 104
Points : 7 994
Points : 7 994
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
declare 
  l_clob  clob;
Begin  
  --
  FOR crs IN (SELECT * 
                FROM TABLE(dbms_workload_repository.ash_report_html(1485633966, 1, SYSDATE-30/1440, SYSDATE-1/1440))
             )
  Loop
    l_clob := l_clob || crs.output;
  End Loop;
  --
  dbms_output.put_line(length(l_clob));
  --
  INSERT INTO t_clob(id, doc) VALUES (100,l_clob);
  --
  commit;
End;
/
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2013, 15h19   #3
alex_972
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 60
Points : 18
Points : 18
Merci, ca fonctionne parfaitement.

Juste pour ma culture, il n'y a pas de methode pour by passer mon probleme de buffer ?
alex_972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 16h32   #4
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 104
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 4 104
Points : 7 994
Points : 7 994
Citation:
VALUE_ERROR
Any of lob_loc, amount, or offset parameters are NULL, out of range, or INVALID.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
declare 
  l_clob  clob;
Begin  
  --
  dbms_lob.createtemporary(l_clob, TRUE);
  dbms_lob.open(l_clob, dbms_lob.lob_readwrite);
  --
  FOR crs IN (SELECT * 
                FROM TABLE(dbms_workload_repository.ash_report_html(1485633966, 1, SYSDATE-30/1440, SYSDATE-1/1440))
             )
  Loop
    IF crs.output IS NOT NULL 
    Then 
      DBMS_LOB.writeappend(l_clob, Length(crs.output),crs.output);
    End IF;
  End Loop;
  --
  dbms_output.put_line(length(l_clob));
  --
  dbms_lob.freetemporary(l_clob);
  --
End;
/
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h14.


 
 
 
 
Partenaires

Hébergement Web