Tengo un servicio (PUT) creado con ORDS 19.1 en BD Oracle 12c, cuando hago una petición y el Json del cuerpo lleva algún carácter acentuado (áéíóñ..etc) me genera un ORA-40441 en la linea l_top_obj := json_object_t.parse(l_json); he intentado usar blob y obtener el parámetro :body pero entonces los caracteres acentuados son convertidos a cosas como esta ó. El juego de caracteres de la base de datos es WE8MSWIN1252.
declare
l_json clob;
l_top_obj json_object_t;
l_items_arr json_array_t;
l_item_obj json_object_t;
t_respuesta clob;
t_campos_ins pkg_insumos.rec_registro;
begin
if fbd_consulte_token_json(:token) = 'A' then
l_json := :body_text;
l_top_obj := json_object_t.parse(l_json);
l_items_arr := l_top_obj.get_array('items');
for i in 0 .. l_items_arr.get_size - 1 loop
l_item_obj := treat(l_items_arr.get(i) as json_object_t);
t_campos_ins.id_registro := l_item_obj.get_number('id');
t_campos_ins.caso := l_item_obj.get_string('caso');
t_campos_ins.id_fun := l_item_obj.get_number('id_fun');
t_campos_ins.id_campo_fun := l_item_obj.get_number('id_campo_fun');
t_campos_ins.tipo_fun := l_item_obj.get_string('tipo_fun');
t_campos_ins.clase_fun := l_item_obj.get_string('clase_fun');
t_campos_ins.variable := l_item_obj.get_string('variable');
t_campos_ins.tipo_variable := l_item_obj.get_string('tipo_variable');
t_campos_ins.forma_captura := l_item_obj.get_string('forma_captura');
t_campos_ins.clase_variable := l_item_obj.get_string('clase_variable');
t_campos_ins.ubicacion_excel := l_item_obj.get_string('ubicacion_excel');
t_campos_ins.formula := l_item_obj.get_string('formula');
t_campos_ins.id_patch := l_item_obj.get_number('id_patch');
t_campos_ins.id_pantalla := l_item_obj.get_number('id_pantalla');
t_campos_ins.id_campo_pantalla := l_item_obj.get_number('id_campo_pantalla');
t_campos_ins.id_tabla := l_item_obj.get_number('id_tabla');
t_campos_ins.id_campo_tabla := l_item_obj.get_number('id_campo_tabla');
t_campos_ins.id_paquete := l_item_obj.get_number('id_paquete');
t_campos_ins.id_campo_paquete := l_item_obj.get_number('id_campo_paquete');
t_campos_ins.orden := l_item_obj.get_number('orden');
t_campos_ins.id_opcion_menu := l_item_obj.get_number('id_opcion_menu');
t_campos_ins.origen_lista := l_item_obj.get_string('origen_lista');
t_campos_ins.lista_intermedio := l_item_obj.get_string('lista_intermedio');
t_campos_ins.id_col_filtro := l_item_obj.get_number('id_col_filtro');
t_campos_ins.filtro_lista := l_item_obj.get_string('filtro_lista');
t_campos_ins.heredar_valor_de := l_item_obj.get_string('heredar_valor_de');
t_campos_ins.filtro_usuario := l_item_obj.get_string('filtro_usuario');
t_campos_ins.filtro_tecnico := l_item_obj.get_string('filtro_tecnico');
t_campos_ins.estado_registro := l_item_obj.get_string('estado_registro');
t_campos_ins.id_ori_pantalla := l_item_obj.get_number('id_ori_pantalla');
t_campos_ins.id_col_filtro_pan := l_item_obj.get_number('id_col_filtro_pan');
t_campos_ins.aux_enlaces := l_item_obj.get_string('aux_enlaces');
t_campos_ins.filtro_inicial := l_item_obj.get_string('filtro_inicial');
pkg_insumos.Actualiza(t_campos_ins,t_respuesta);
if t_respuesta='OK' then
-- t_respuesta := json_object(key 'mensaje' value 'Registro actualizado');
:forward_location:='http://172.18.1.21:8484/ords/agsegu/PCI/insumos/:{token}?id_registro=' ||t_campos_ins.id_registro;
:status :=201;
else
-- t_respuesta := json_object(key 'mensaje' value 'No se pudo actualizar el registro: ' || t_respuesta);
:forward_location:=Null;
:status :=401;
rollback;
exit;
end if;
end loop;
end if;
commit;
HTP.print(l_top_obj.to_string);
exception when others then
HTP.print(sqlerrm);
end;
Agradezco cualquier tip que me pueda ayudar ya que lo he intentado todo. Gracias