tabla read leer guardar ejemplos descomponer archivos xml oracle plsql insert xml-parsing

read - oracle plsql: cómo analizar XML e insertarlo en la tabla



read xml oracle (4)

¿Cómo cargar un archivo xml anidado en la tabla de la base de datos?

<?xml version="1.0" ?> <person> <row> <name>Tom</name> <Address> <State>California</State> <City>Los angeles</City> </Address> </row> <row> <name>Jim</name> <Address> <State>California</State> <City>Los angeles</City> </Address> </row> </person>

En este xml, la persona es el nombre de la tabla, el nombre es el nombre archivado, Tom es su valor registrado. La dirección es una subtabla y el estado y la ciudad son dos columnas dentro de la dirección. Quiero insertar la fila de personas en la tabla de personas, si falló, no las inserte en la tabla de direcciones. Este xml podría ser muy grande. ¿Cuál es la mejor solución para hacer esto?


Puede cargar un documento XML en un XMLType y luego consultarlo, por ejemplo:

DECLARE x XMLType := XMLType( ''<?xml version="1.0" ?> <person> <row> <name>Tom</name> <Address> <State>California</State> <City>Los angeles</City> </Address> </row> <row> <name>Jim</name> <Address> <State>California</State> <City>Los angeles</City> </Address> </row> </person>''); BEGIN FOR r IN ( SELECT ExtractValue(Value(p),''/row/name/text()'') as name ,ExtractValue(Value(p),''/row/Address/State/text()'') as state ,ExtractValue(Value(p),''/row/Address/City/text()'') as city FROM TABLE(XMLSequence(Extract(x,''/person/row''))) p ) LOOP -- do whatever you want with r.name, r.state, r.city END LOOP; END;


Tendrá que escribir una gran cantidad de código para procesar archivos XML complejos con Oracle. Si tiene grandes volúmenes de XML, el rendimiento también puede ser una preocupación. Los analizadores XML de nivel empresarial le permitirán procesar grandes volúmenes de archivos XML complejos en un formato relacional sin escribir ningún código. Esta publicación de blog muestra cómo cargar de forma masiva archivos XML complejos a Oracle sin escribir ningún código


select * FROM XMLTABLE(''/person/row'' PASSING xmltype('' <person> <row> <name>Tom</name> <Address> <State>California</State> <City>Los angeles</City> </Address> </row> <row> <name>Jim</name> <Address> <State>California</State> <City>Los angeles</City> </Address> </row> </person> '') COLUMNS --describe columns and path to them: name varchar2(20) PATH ''./name'', state varchar2(20) PATH ''./Address/State'', city varchar2(20) PATH ''./Address/City'' ) xmlt ;


CREATE OR REPLACE PROCEDURE ADDEMP (xml IN CLOB) AS BEGIN INSERT INTO EMPLOYEE (EMPID,EMPNAME,EMPDETAIL,CREATEDBY,CREATED) SELECT ExtractValue(column_value,''/ROOT/EMPID'') AS EMPID ,ExtractValue(column_value,''/ROOT/EMPNAME'') AS EMPNAME ,ExtractValue(column_value,''/ROOT/EMPDETAIL'') AS EMPDETAIL ,ExtractValue(column_value,''/ROOT/CREATEDBY'') AS CREATEDBY ,ExtractValue(column_value,''/ROOT/CREATEDDATE'') AS CREATEDDATE FROM TABLE(XMLSequence( XMLType(xml))) XMLDUMMAY; COMMIT; END;