Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
817 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  écrire plus que 32767 octets dans un fichier!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

écrire plus que 32767 octets dans un fichier!!

n°1960445
jarod_93
Posté le 26-01-2010 à 12:30:25  profilanswer
 

Bonjour,
 
Je souhaiterais écrire plus de 32767 octets de données dans un fichier que j'ai défini dans un procédure pl/sql.
 
Ces données sont contenues dans une variable qui j'ai déclaré en CLOB pour des contraintes de taille (type VARCHAR2 ne suffisant pas). Quand je test la procédure sans l'écriture dans le fichier, elle me ramène bien les données souhaitée. Mais pour l'écriture dans le fichier c'est impossible au-delà des 32767.
 
Y-a-t-il un moyen de pouvoir écrire ces données??  
Grâce à l'utilisation du package dbms_lob peut-être compte-tenu des variables CLOB?
 
Merci d'avance pour votre aide.
 

mood
Publicité
Posté le 26-01-2010 à 12:30:25  profilanswer
 

n°1960509
MagicBuzz
Posté le 26-01-2010 à 14:22:42  profilanswer
 

1/ Quelle version d'Oracle ? (parce que déjà, faut réussir à détecter que c'est d'Oracle qu'il s'agit)
2/ Le passage de ton script qui déconne ?
3/ Comment accèdes-tu à Oracle ? SQL+, OLEDB, etc ?

n°1960513
jarod_93
Posté le 26-01-2010 à 14:42:15  profilanswer
 

C'est la version 10g.
 
En fait le problème il est déjà dans la taille de la variable qui stocke les données que je veux récupérer. La taille de ces données est supérieure à 32767 et j'aurais voulu savoir si je peux utiliser CLOB pour tout stocker. Si oui comment faire pour écrire le contenu dans un fichier que j'ai crée pour tracer le traitement.
 
J'accède à oracle avec SQL+.
 
voici une partie du script:
 
CREATE OR REPLACE PROCEDURE SPBUCI0101_07
 (par_idOrdon       IN  VARCHAR2,
  par_jobSet        IN  VARCHAR2,
  par_vcListeCmdOrd IN  VARCHAR2,
   par_vcListeMgtrt  IN  VARCHAR2,
  par_cheminLog     IN  VARCHAR2,
  par_fichierLog    IN  VARCHAR2) IS
vcMesErr    VARCHAR2(32767);
vcValParam  VARCHAR2(32767);
vcListeTemp VARCHAR2(8000);
vcCodMgfon  VARCHAR2(8);
vcTypMgfon  VARCHAR2(1);
vcEdiMgfon  VARCHAR2(1);
vcUtil      VARCHAR2(12);
vcTemMess   VARCHAR2(1);
vcMessParam VARCHAR2(32767);
vdValParam  DATE;
var_idOrdon NUMBER;
iValParam   NUMBER;
iNumParam   NUMBER;
iEtpnbMgtrt NUMBER;
iNumMgtrt   NUMBER;
i           NUMBER;
ivcVAL VARCHAR(8);
ivcVAL2 VARCHAR(8);
CURSOR C_OPLOPCOD IS
select FIOPF.FIOPF_COD,OPLOP_COD from OPLOP,FIOPF
where OPLOP.FIOPF_COD = FIOPF.FIOPF_COD
AND FIOPF.TOTIE_CODSOC=7
AND FIOPF.TASTA_COD <>'A'
AND FIOPF.TASTA_COD <>'S'
;
 
vcValParam := '';
 BEGIN
 OPEN C_OPLOPCOD ;
 LOOP
  FETCH C_OPLOPCOD INTO ivcVAL,ivcVAL2;
  EXIT WHEN C_OPLOPCOD%NOTFOUND;
   
  IF (vcValParam is null) THEN
   vcValParam := ''||(ivcVAL);
  ELSE
   vcValParam := vcValParam||'!'||(ivcVAL);
  END IF;
   
 END LOOP;
 CLOSE C_OPLOPCOD;
 vcValParam := vcValParam||'!';
 
 dbms_output.put_line ('Liste des codes opération: '||vcValParam);
 
 END;
 vcMesErr := ALIM_MGVLP(iNumMgtrt,2,vcValParam);
 IF (vcMesErr is not null) THEN
  goto FIN_PROCEDURE;
 END IF;
 vcMessParam := '  2 - Liste des codes opérations : '||vcValParam;
utl_file.put_line(FIC_TRACE,vcMessParam);
 
Comme tu peux le constater j'aurais voulu que la capacité de la variable vcValParam soit supérieure à 32767 et pouvoir écrire le contenu de cette variable grâce au utl_file.put_line de la fin.
 
Merci de ton attention.

n°1960517
couak
Posté le 26-01-2010 à 15:02:48  profilanswer
 

tu t'étais toi même répondu à tes question ^^ t'aurais testé au lieu de t'affoler y'aurais pas eu de soucis :)
- oui tu peux utiliser un CLOB pour dépasser la limite des 32K
- UTL_FILE étant limité à 32K, et qu'en plus peu de DBA activent l'option dans le fichier init (car considéré comme une faille), oui tu peux utiliser dbms_lob

n°1960518
MagicBuzz
Posté le 26-01-2010 à 15:03:46  profilanswer
 

Déjà, tu dois savoir qu'un CLOB peut contenir plusieurs Go de données. 4 si je ne m'abuse, à moins que ce ne soit seulement 2 sous Oracle.
 
Dans tous les cas, une fois qu'on sait ça, on commence à se dire "ah ouais, en fait mes 32 Ko c'est la taille du buffer qui permet d'interroger ce type de données, et non une variable.
 
Bon, après, comment parcourir le contenu du CLOB, à vrai dire, aucune idée. Je m'en suis servis qu'une fois, en programmation depuis du C#, du coup il fallait un streamreader (ça se lisait comme un fichier texte si tu préfères).
 
Ici, tu trouveras pas mal de doc :
http://helyos.developpez.com/lob/
 
Avec des pistes apparemment pour lire l'intégralité d'un CLOB.
 
Et à priori, la réponse à ton problème :
http://www.dba-oracle.com/t_writin [...] s_file.htm

n°1960522
jarod_93
Posté le 26-01-2010 à 15:09:53  profilanswer
 

Merci beaucoup pour ces précisions.
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  écrire plus que 32767 octets dans un fichier!!

 

Sujets relatifs
[C] Lire un fichier . txtfichier csv et perte de saut de ligne !!
[Resolu] Problème de récupération d'un fichier résultat de POST (API)[Python] Supprimer la fin d'un fichier texte
Redirection de la sortie standard vers une ligne d'un fichier texteVSB et excel fichier VALIDE - on peut fermer le post
parcourir fichier CSV (TAB), saut de ligne non détecté[Résolu] boucle for ne retient que la dernière ligne du fichier
suppression structure dans fichier[C] Ecriture dans un fichier
Plus de sujets relatifs à : écrire plus que 32767 octets dans un fichier!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR