Ecco qualcosa che puoi fare in Oracle 12.2. In Oracle 19 potrebbe essere un po' più semplice, usando json_object(*)
.
Usando lo standard DEPT
tabella dal SCOTT
schema per l'illustrazione:
declare
items json_object_t;
result clob;
begin
select json_object(
key 'items'
value json_arrayagg(
json_object(
key 'deptno' value deptno,
key 'dname' value dname,
key 'loc' value loc
)
) format json
)
into result
from scott.dept;
items := json_object_t(result);
-- Check what is stored in items
dbms_output.put_line('items.stringify = ' || chr(10) || items.stringify);
end;
/
Ho incluso una chiamata a stringify
metodo per mostrare il contenuto di json_object_t
oggetto. ApEx potrebbe preferirlo in json_object_t
tipo di dati - se tutto ciò di cui hai bisogno è una stringa, non è necessario costruire quell'oggetto, poiché result
è già la stringa che ti serve.
Il risultato è simile al seguente:
items.stringify =
{"items":[{"deptno":10,"dname":"ACCOUNTING","loc":"NEW YORK"},{"deptno":20,"dname":"RESEARCH","loc":"DALLAS"},{"deptno":30,"dname":"SALES","loc":"CHICAGO"},{"deptno":40,"dname":"OPERATIONS","loc":"BOSTON"}]}
PL/SQL procedure successfully completed.
Nota che la stringa non è abbastanza formattata e non dovrebbe esserlo. Questo è qualcosa che si dovrebbe fare solo come ultimo passaggio dopo averlo ricevuto, non dall'estremità "trasmittente".