Previously I had an AJAX PL/SQL callback that returned a relatively simple JSON string, using the LISTAGG technique described by Lucas here.
declare l_json varchar2(32767); begin select listagg('{"id":"'||version||'","content":"'||version||'.x"}',',') within group (order by null) json into l_json from ( select distinct substr(version,1,1) version from apex_timeline order by version ); sys.htp.prn('['||l_json||']'); end getGroups;Now it can be further simplified by taking LISTAGG out of the equation, which can be a problem for larger data sets:
DECLARE c sys_refcursor; BEGIN open c for select version as id ,version||'.x' as content from ( select distinct substr(version,1,1) version from apex_timeline order by version ); apex_json.write(c); END;The output differs only slightly
[{"id":"1","content":"1.x"},{"id":"2","content":"2.x"},{"id":"3","content":"3.x"},{"id":"4","content":"4.x"},{"id":"5","content":"5.x"}]
[ { "ID":"1" ,"CONTENT":"1.x" } ,{ "ID":"2" ,"CONTENT":"2.x" } ,{ "ID":"3" ,"CONTENT":"3.x" } ,{ "ID":"4" ,"CONTENT":"4.x" } ,{ "ID":"5" ,"CONTENT":"5.x" } ]
A few extra spaces in the apex_json version. If lower case required for JSON attributes then use double quotes around column aliases, ie:
select version as "id"
Oracle 12c JSON APIs seem to be all about validating and deconstruction, while this API has a bunch of overloaded
apex_json.write()
modules, including support for CLOBs.Craig Sykes demonstrated how this could be done dynamically with a simple page.
No comments:
Post a Comment