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"
}
]}