Problema de codificación en la carga de los XML.

       A veces ocurre que cuando se trabaja con xml dependiendo de la codificación puede que nuestro código no funcione correctamente. La solución filtrar los datos del xml antes de insertarlos en un campo XMLTYPE de una tabla de la base de datos. Por tanto, para un Insert into TABLA (xxx,xxx,campoXMLTYPE) VALUES('xxx','xxxx',XMLTYPE(getClobDocumento e_directorio,v_ruta||pe_Fichero,null))

       Siendo pe_directorio el directorio virtual de base de datos en el que se encuentran los xml. V_ruta es la ruta es la ruta desde el directorio virtual hasta el fichero, si está al mismo nivel no es necesario. Pe_fichero es el nombre del fichero.


Ejemplo de declaración
          
                
FUNCTION getClobDocumento(pe_nombre_directorio VARCHAR2,
pe_filename in varchar2,
pe_charset in varchar2 default NULL)
RETURN CLOB deterministic
  is
    file   bfile := bfilename(pe_nombre_directorio,pe_filename);
    charContent     CLOB := ' ';
    targetFile      bfile;
    lang_ctx        number := DBMS_LOB.default_lang_ctx;
    charset_id      number := 0;
    src_offset      number := 1 ;
    dst_offset      number := 1 ;
    warning         number;
 begin
   if pe_charset is not null then
       charset_id := NLS_CHARSET_ID(pe_charset);
   end if;
   targetFile := file;
   DBMS_LOB.fileopen(targetFile, DBMS_LOB.file_readonly);
   DBMS_LOB.LOADCLOBFROMFILE(charContent, targetFile,
  DBMS_LOB.getLength(targetFile),
  src_offset, dst_offset,charset_id, lang_ctx,warning);
   DBMS_LOB.fileclose(targetFile);
   return charContent;
END  getClobDocumento;
           
          

1 comentario:

Anónimo dijo...

Gracias por el código, la verdad es que estaba un poco desesperado, no encontraba la solulción.
saludos.