Här är något du kan göra i Oracle 12.2. I Oracle 19 kan det vara lite enklare med json_object(*)
.
Använder standarden DEPT
tabell från SCOTT
schema för illustration:
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;
/
Jag inkluderade ett anrop till stringify
metod för att visa innehållet i json_object_t
objekt. ApEx kanske föredrar det i json_object_t
datatyp - om allt du behöver är en sträng behöver du inte konstruera det objektet, eftersom result
är redan den sträng du behöver.
Resultatet ser ut så här:
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.
Observera att strängen inte är snyggt formaterad - och det borde den inte vara. Det är något man bara skulle göra som det sista steget efter att ha tagit emot det, inte från den "sändande" änden.