Esto es una gran utilidad y tiene mucha utilidad, vamos a realizar un ejemplo en el que vamos a consultar un listado de paises en formato JSON desde esta dirección:
Para empezar vamos a tener que :
- Dar los permisos necesarios utl_http de ejecución
- Crear la reglas de ACL para consumir la pagina
Permiso UTL_HTTP usuario VICTOR
GRANT EXECUTE ON UTL_HTTP TO VICTOR;
Regla ACL
--CREAR ACL ACL_WEBSERVICE_TESTbeginDBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'acl_webservice_test.xml',description => 'pruebas de consumos de servicios web',principal => 'PUBLIC',is_grant => true,privilege => 'connect');end;
--Dar permiso para consumir la direccion COUNTRY.IO por el puerto 80BEGINDBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'acl_webservice_test.xml',host => 'country.io',lower_port => 80);commit;END;
Ahora si, procedamos a realiza la rutina para la lectura de los datos, se puede traer todo de una sola o por partes, pero es preferible por parte ya que el request puede devolver un valor muy grande y resultado se cortará.
--De una solaSELECT UTL_HTTP.REQUEST('http://country.io/names.json') FROM DUAL;
--Por partesDECLAREL_HTML UTL_HTTP.HTML_PIECES;BEGINL_HTML := UTL_HTTP.REQUEST_PIECES ( 'http://country.io/names.json', 100 );DBMS_OUTPUT.PUT_LINE ( L_HTML.COUNT || ' piezas.' );IF L_HTML.COUNT < 1 THENDBMS_OUTPUT.PUT_LINE ( 'SIN DATOS' );ELSEFOR i IN 1 .. L_HTML.COUNT LOOPDBMS_OUTPUT.PUT_LINE ( L_HTML ( i ) );END LOOP;END IF;END;
Ahora el mismo ejemplo pero ahora lo enviamos a una tabla, para ello crearemos una tabla para almacenarlo.
CREATE TABLE HTTP_PAISES
(
DATO CLOB
);
--Almacenar el resultado en la tabla HTTP_PAISESDECLAREL_HTML UTL_HTTP.HTML_PIECES;L_DATO CLOB;BEGINL_HTML := UTL_HTTP.REQUEST_PIECES ( 'http://country.io/names.json', 100 );DBMS_OUTPUT.PUT_LINE ( L_HTML.COUNT || ' piezas.' );IF L_HTML.COUNT < 1 THENDBMS_OUTPUT.PUT_LINE ( 'SIN DATOS' );ELSEFOR i IN 1 .. L_HTML.COUNT LOOPL_DATO:=L_DATO||L_HTML ( i );DBMS_OUTPUT.PUT_LINE ( L_HTML ( i ) );END LOOP;INSERT INTO HTTP_PAISES(DATO)VALUES(L_DATO);COMMIT;END IF;END;
--LISTA LOS PAISESSELECT PAISFROM HTTP_PAISES tCROSS JOINJSON_TABLE(t.DATO,'$.*'COLUMNS (PAIS PATH '$'))T_LIST;
Tienes in ejemplo sencillo de como consumir servicios web desde la base y espero te sirva.
Si quieres ver el uso de JSON en Oracle mira el siguiente blog.
https://oracle-y-yo.blogspot.com/2021/04/leer-datos-json-como-tabla-en-oracle.html
No hay comentarios:
Publicar un comentario