Saltar al contenido

Devuelve los resultados de una consulta SQL como JSON en Oracle 12c

Solución:

Oracle 12c versión 12.1.0.2 (la última versión a 11.11.2014) agrega soporte JSON: https://docs.oracle.com/database/121/NEWFT/chapter12102.htm#BGBGADCC

Está disponible desde el 17 de octubre. https://blogs.oracle.com/db/entry/oracle_database_12c_release_1

Si no puede parchear / trabajar con esa versión, hay un paquete excelente escrito por Lewis Cunningham y Jonas Krogsboell: PL / JSON * http://pljson.sourceforge.net/

Es un paquete excelente (lo he usado en numerosas instalaciones de bases de datos).

Los ejemplos incluidos son buenos y cubren la mayoría de los escenarios.

declare 
  ret json;
begin
  ret := json_dyn.executeObject('select * from tab');
  ret.print;
end;
/

12cR2 (disponible en Oracle Cloud) admite esto de forma nativa.

SQL> select JSON_ARRAY(EMPLOYEE_ID, FIRST_NAME,LAST_NAME) from HR.EMPLOYEES;

JSON_ARRAY(EMPLOYEE_ID,FIRST_NAME,LAST_NAME)
--------------------------------------------------------------------------------
[100,"Steven","King"]
[101,"Neena","Kochhar"]

o

SQL> select JSON_OBJECT('ID' is EMPLOYEE_ID , 'FirstName' is FIRST_NAME,'LastName' is LAST_NAME) from HR.EMPLOYEES;

JSON_OBJECT('ID'ISEMPLOYEE_ID,'FIRSTNAME'ISFIRST_NAME,'LASTNAME'ISLAST_NAME)
----------------------------------------------------------------------------
{"ID":100,"FirstName":"Steven","LastName":"King"}
{"ID":101,"FirstName":"Neena","LastName":"Kochhar"}

Puede utilizar xmltype para convertir el resultado de un SQL en XML y JSON. Consulte el siguiente artículo para conocer la solución que funcionará para Oracle desde la versión 9. También puede descargar el paquete itstar_xml_util:

http://stefan-armbruster.com/index.php/12-it/pl-sql/12-oracle-xml-and-json-goodies

Un ejemplo simple con la tabla emp:

declare
  l_sql_string varchar2(2000);
  l_xml        xmltype;
  l_json       xmltype;
begin
  l_sql_string := 'select a.empno, a.ename, a.job from emp a';

  -- Create the XML from SQL
  l_xml := itstar_xml_util.sql2xml(l_sql_string);

  -- Display the XML
  dbms_output.put_line(l_xml.getclobval());

  l_json := itstar_xml_util.xml2json(l_xml);
  -- Display the JSON
  dbms_output.put_line(l_json.getclobval());  
end;

El resultado se ve así:

{"ROWSET": [
    {
      "EMPNO": 7839,
      "ENAME": "KING",
      "JOB": "PRESIDENT"
    },
    {
      "EMPNO": 7698,
      "ENAME": "BLAKE",
      "JOB": "MANAGER"
    },
[...]
    {
      "EMPNO": 7934,
      "ENAME": "MILLER",
      "JOB": "CLERK"
    }
  ]}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *