Hola,
Lo primero a decidir es desde donde vas a bajar los datos, en el ejemplo que deje lo hice dentro de la base de datos, utilizando el paquete de Oracle UTL_FILE, esto significa que los ficheros se van a generar en el servidor donde este instalado Oracle. Pero para poder trabajar con este paquete hay que configurar dos cosas.
1. El parametro de Oracle UTL_FILE_DIR='Directorio'.
2. Permisos de ejecucion sobre el paquete UTL_FILE al usuario de base de datos con el que estes trabajando.
Estas dos cosas se las tienes que pedir a tu Administrador de base de datos. Probablemente por problemas de permisos es que no te este compilado la linea
xfile utl_file.file_type;.
Ahora, segun veo tu codigo, a partir de la linea
Código:
CONTEXT := DBMS_XMLGEN.newcontext ('SELECT * FROM ' || w_tbprs.ctabla);
RESULT := DBMS_XMLGEN.getxml (CONTEXT);
ya puedes bajar los datos al fichero XML, dado que tienes un CLOB (RESULT) con toda la informacion, hasta ahora no veo la necesidad de las tablas DATO_TABLA_XML y PROCE3.
Despues de que tengas los datos dentro de RESULT puedes utilizar..
Código:
--creamos y obtenemos el fichero
xfile:= utl_file.fopen('/home/oracle/scripts/data',user_file,'w');
--obtenemos la longitud del xml lob
len := dbms_lob.getlength(xml);
while (pos <= len) loop
vxml := dbms_lob.substr(xml, amount, pos);
utl_file.put_line(xfile,vxml,TRUE);
pos := pos + amount;
end loop;
utl_file.fclose(xfile);
Donde la variable
xml es igual a
RESULT.
Saludos