SELECT dbms_xmlgen.GETXML( ' select e.NUM_CUENTA
"Cuenta_Contable",
e.DES_CUENTAESP
"Descripcion"
FROM co_Catalogo
e
WHERE
cod_compania=01001001' ) FROM DUAL;
En este ejemplo se muestra el paquete de
oracle DBMS_XMLGEN.GETXML donde se va a hacer un SELECT pero no como contenido
si no como una cuerda…donde vamos a disponer de una tabla “e” con los campos
que deseamos convertir en XML y su respectivo alias, donde va a existir una
sentencia que debe de ser válida en la base de datos.
SELECT
xmlelement("CuentaContable",
xmlCONCAT
(xmlelement("Cuenta_Contable",e.NUM_CUENTA)
,xmlelement("Descripcion",e.DES_CUENTAESP)
,xmlelement("Moneda",e.Cod_moneda)
)) Registro
FROM
co_Catalogo e
WHERE
cod_compania= '01001001';
En este otro ejemplo observamos el
XMLELEMENT que es un elemento del XML, hay que recordar que un archivo XML se
divide por jerarquías, por ejemplo:
<Árbol <Ramas> </Ramas></Árbol>
En este ejemplo se le asigna al XML el
nombre o alias Registro que es el que se mostrará en el respectivo archivo.
EL XMLCONCAT sirve para concatenar de un
modo XML, mientras que un CONCAT simple se restringe a concatenar en forma de
contenido.
Procedimiento
para ejecutar un fichero Oracle en XML:
CREATE OR REPLACE PROCEDURE
UsuarioOra.exportacuentas_xml (compania varchar2) IS
CURSOR xmlcur IS
SELECT
xmlelement("CuentaContable",XMLATTRIBUTES(TIP_NIVEL),
xmlCONCAT
(xmlelement("Cuenta_Contable",e.NUM_CUENTA)
,xmlelement("Descripcion",e.DES_CUENTAESP)
,xmlelement("Moneda",e.Cod_moneda),
xmlelement("Movimientos",(select
xmlconcat
(xmlelement("fechadoc",to_Char(z.FEC_DOCUMENTO,'DD-MON-YEAR')),
xmlelement("Monto",z.Mon_monto)
)
from CO_DETALLED Z
where z.cod_compania=e.cod_compania
and
z.num_cuenta=e.num_cuenta)))
).getStringval()Registro
FROM CO_CATALOGO
E
WHERE cod_compania= compania;
XMLDATA CLOB;
Cadena VARCHAR2(32767);
file1 UTL_FILE.FILE_TYPE;
BEGIN
file1 :=
UTL_FILE.FOPEN('XML','prueba.xml','W',256);
UTL_FILE.PUT_LINE(file1,'');
For k in xmlcur loop
UTL_FILE.PUT_LINE(file1,
k.Registro);
end loop;
UTL_FILE.PUT_LINE(file1,'
');
UTL_FILE.FCLOSE(file1);
END;
No hay comentarios:
Publicar un comentario