Oracle - Agregar datos de un xml a una tabla de oracle

 
Vista:

Agregar datos de un xml a una tabla de oracle

Publicado por MAM (3 intervenciones) el 07/05/2009 20:21:12
HOLA A TODOS
SOY NOVATO EN EL USO DE ORACLE 9i

TENGO UN PROBLEMA Y QUISIERA SABER SI ALGUNO DE USTEDES ME PUEDE PROPORCIONAR UN EJEMPLO QUE PUEDA EJECUTAR DESDE PL SQL
PARA EXTRAER LOS DETALLES DE UN XML Y ESTOS DATOS A SU VEZ INSERTARLOS EN UNA TABLA CADA UNO EN SU RESPECTIVO CAMPO

ESTO LO SOLICITO POR QUE YO HE CREADO UN STORED QUE SUPONIA LO HARIA

EL STORED COMPILA CORRECTAMENTE
HASTA DONDE LO DEBUGUEO LEE CORRECTAMENTE EL XML PERO CUANDO LO QUIERO INSERTEAR EN SU TABLA ME MANDA UN ERROR QUE NO PUEDO RESOLVER

AGRADEZCO DE ANTE MANO SU AYUDA


SALUDOS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Agregar datos de un xml a una tabla de oracle

Publicado por Sergio (79 intervenciones) el 08/05/2009 07:43:01
Ojalá pudieras poner aquí el mensaje de error del que hablas, inclusive la parte del código donde te marca el error, adivinar cual es tu problema sin estas pistas sería perder el tiempo.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agregar datos de un xml a una tabla de oracle

Publicado por MAM (3 intervenciones) el 08/05/2009 16:58:15
SERGIO

AGRADEZCO TUS COMENTARIOS

ANEXO EL CODIGO DE LOS STORED
Y EL MENSAJE DE ERROR
LA LINEA DONDE SE GENERA EL ERROR ES LA QUE TIENE LOS ASTERISCOS

PROCEDURE DIRECTORIO(MONEDAS_C OUT T_CURSOR)
IS

dest_clob clob;
archivo_in bfile;
tamaño number;
inicio_destino integer:=1;
inicio_origen integer:=1;
juego_caracteres number:=0;
contexto_idioma number:=0;
aviso number:=0;
BEGIN
archivo_in:= bfilename('XML_DIR','datos.xml');
dbms_lob.fileopen(archivo_in,dbms_lob.file_readonly);
if (dbms_lob.fileexists(archivo_in)=1) then
tamaño:=dbms_lob.getlength(archivo_in);
contexto_idioma:=1;
dbms_lob.createtemporary(dest_clob,true);
dbms_lob.loadclobfromfile(dest_clob,
archivo_in,
tamaño,
inicio_destino,
inicio_origen,
juego_caracteres,
contexto_idioma,
aviso
);
dbms_lob.fileclose(archivo_in);
Agregar(dest_clob,'TB_MAXTRA');
commit;
end if;
open MONEDAS_C for
select *
from TB_MAXTRA;
END DIRECTORIO;


PROCEDURE Agregar(documentoXML in clob, nomTabla in varchar2)
IS
contextAgregar dbms_xmlsave.ctxType;
numFilas number;
BEGIN
contextAgregar:=dbms_xmlsave.newContext(nomTabla);
dbms_xmlsave.clearUpdateColumnList(contextAgregar);
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'CD_CLIENTE');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'CD_VEHICULO');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'CD_MEDIO');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'AGENCIA');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'CLIENTE');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'REPRESENTANTE');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'MARCA');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'PRODUCTO');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'VEHICULO');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'BLOQUEHORARIO');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'ESPACIO');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'CAMPANIA');
BMS_XMLSAVE.setUpdateColumn(contextAgregar,'EXHIBICION');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'MONITOREO');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'FECHA');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'HORA');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'INVERSION_MAX');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'INVERSION_IBPPESOS');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'SPOTS');
DBMS_XMLSAVE.setUpdateColumncontextAgregar,'DURACION');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'TIPOCAMBIO');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'MONEDA');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'TARGET');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'T35');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'T36');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'T37');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'T38');
DBMS_XMLSAVE.setUpdateColumn(contextAgregar,'T34');
****** numFilas:=dbms_xmlsave.insertXML(contextAgregar,documentoXML);
dbms_xmlsave.closeContext(contextAgregar);
END Agregar;

AHORA EL MENSAJE DE ERROR QUE ARROJA ES EL SIGUIENTE

ORA-29532: Java call terminated by uncaught Java exception: oracle.xml.sql.oracleXMLSQLException: start of root element expected.

ORA-06512: at "SYS.DBMS_XMLSAVE", line 65
ORA-06512: at "TRADING.CARGAR_BASE_TRADING", line 115
ORA-06512: at "TRADING.CARGAR_BASE_TRADING", line 146
ORA-06512: at line 3

DONDE "TRADING.CARGAR_BASE_TRADING" ES EL PACKAGE


ESPERO Y CON ESTO ME PUEDAS AYUDAR

SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agregar datos de un xml a una tabla de oracle

Publicado por Sergio (79 intervenciones) el 08/05/2009 17:33:10
Que tal, según veo el problema debe estar en el CLOB documentoXML ya que este error:

ORA-29532: Java call terminated by uncaught Java exception: oracle.xml.sql.oracleXMLSQLException: start of root element expected.

indica ya sea que no está bien formado el XML que estás pasando o que no coincide con el contexto que acabas de definir para la inserción.

Te recomiendo le des una revisada al siguiente enlace:

http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14252/adx_j_xsu.htm#BABJBCIB

es para 10g, pero igual podría servirte para solucionar tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agregar datos de un xml a una tabla de oracle

Publicado por MAM (3 intervenciones) el 08/05/2009 23:37:05
MUCHAS GRACIAS POR EL TIP

LO VOY A REVISAR

SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar