Oracle - Error UTL_HTTP.WRITE_TEXT ORA-06502

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 4 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

Error UTL_HTTP.WRITE_TEXT ORA-06502

Publicado por Angel Antonio (3 intervenciones) el 25/06/2019 00:07:04
Estimados,

Espero se encuentren bien, y agradecido de antemano me puedan ayudar,

tengo el siguiente problema. Tengo un procedimiento de almacenado que extraer data de un par de tablas y crea un XML de salida con información de productos y que a su vez es enviada mediante un web service a otra aplicación.

El problema específicamente pasa cuando un producto tiene muchas combinaciones de talla y color, y estas combinaciones pasan de 100 .. ya que, el XML que se arma para la salida pasa de 32000 caracteres.

Realicé una corrida del procedimiento de manera debug e imprimiendo el error y el length del xml, encontré lo siguiente:

Content-Length =>37094
Respuesta: ORA-06502: PL/SQL: error numérico o de valor-6502

Obviamente el XML es extenso y cuando se invoca el utilitario http da el error (write_text).

Anexo extracto de código y una imagen justo donde se cae el procedimiento..

estuve buscando en la web y recomiendan hacer chunk del xml.. en este caso particionar el xml según entiendo, pero no entiendo la manera de hacerlo.

Por favor me podrían ayudar??


UTL_HTTP.set_header(req, 'Content-Type', 'text/xml');
UTL_HTTP.set_header(req, 'SOAPAction', '""');
--X Api Key en headers de transporte a MDW
UTL_HTTP.set_header(req, 'x-api-key', v_xapi_key);
UTL_HTTP.set_header(req, 'Content-Length', LENGTH(vmsg_xml));
UTL_HTTP.write_text(req, vmsg_xml);

resp := UTL_HTTP.get_response(req);

UTL_HTTP.read_text(resp, respVal);
UTL_HTTP.end_response(resp);


--Extraer contenido de XML de respuesta e insertar en tabla de log
vXmlTYrespuesta := XmlType(respVal);



error-utl_http.write_text
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
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Error UTL_HTTP.WRITE_TEXT ORA-06502

Publicado por Rafael (328 intervenciones) el 25/06/2019 14:33:02
Hola:

El procedimiento write_text NO puede escribir mas de 32K.

Si necesitas escribir mas de esto tienes que hacerlo como CLOB y por partes... aqui un ejemplo de como implementarlo

1
2
3
4
5
6
7
8
9
10
11
12
13
l_data := 'fill with some sample piece of text';
http_req := utl_http.begin_request(url => 'http://example.com', method => 'POST');
utl_http.set_header (http_req, 'Content-Length', length(l_data));
utl_http.set_header (http_req, 'Content-Type', 'text/xml;charset=UTF-8');
utl_http.set_header (http_req, 'Transfer-Encoding', 'chunked');
 
loop
  l_chunkData := null;
  l_chunkData := substr(l_data, l_chunkStart, l_chunkLength);
  utl_http.write_text(http_req, l_chunkData);
  if (length(l_chunkData) < l_chunkLength) then exit; end if;
  l_chunkStart := l_chunkStart + l_chunkLength;
end loop;
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
sin imagen de perfil
Val: 8
Ha aumentado su posición en 4 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

Error UTL_HTTP.WRITE_TEXT ORA-06502

Publicado por Angel Antonio (3 intervenciones) el 25/06/2019 15:58:30
Gracias Rafael..! haré la prueba con el código adjunto.
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