viernes, 14 de junio de 2013

Importar un XML a una tabla Oracle

CREATE OR REPLACE procedure p_importafromxml(              --se crea el procedimiento
                    pv_tabla  varchar2,                    --se crean los parametros                                          
                    pv_esquema varchar2) is

l_bfile   BFILE;                                                                    --se crea el archivo bfile                                                                               
vv_esquema_tabla varchar2(2000);                                       --se crea la variable esquema tabla
vc_xml clob;                                                                         --se crea la variable clob
vn_registros number;                                                      --se crea la variable de los registros
ctx dbms_xmlsave.ctxtype;                                         --se crea la variable xmlsave

begin                                                                             --inicio del bloque

dbms_lob.createtemporary(vc_xml, cache=>FALSE);   
--se crea un lob.temporary que aproveche todo el clob

  l_bfile := BFileName('XMLEXPORT','datos.xml');                                                 
--a la variable clob se le asigna bfilename (directorio,archivo)
 
  dbms_lob.open(l_bfile, dbms_lob.lob_readonly);                                         
--se hace un lob.open(variable bfile, lob.readonly)

  dbms_lob.loadFromFile(dest_lob => vc_xml,                                                    
--lob.loadfromfile con los parametros correspondientes
                        src_lob  => l_bfile,
                        amount   => dbms_lob.getLength(l_bfile));                             
--lob.getlength (bfile)
  dbms_lob.close(l_bfile);                                 --lob.close(bfile)
   
vv_esquema_tabla:=pv_esquema||'.'||pv_tabla;                                                 
--esquema + tabla

ctx:=dbms_xmlsave.newcontext(vv_esquema_tabla);                                      
--a la variable contexto se le asigna uno nuevo contexto(esquema.tabla)

dbms_xmlsave.setrowtag(ctx,'DATA_RECORD');                                              
--se setea fila y etiqueta(contexto, primera etiqueta del xml)

vn_registros:=dbms_xmlsave.insertxml(ctx,vc_xml);                                         
--a la variable registros se le asigna el xmlsave.insert(contexto,variable clob)
dbms_xmlsave.closecontext(ctx);                       --se cierra el contexto
end;                                                                      --fin del bloque


end p_importafromxml;                                           --fin del procedimiento

2 comentarios: