Her er noget, du kan gøre i Oracle 12.2. I Oracle 19 kan det være lidt enklere ved at bruge json_object(*)
.
Bruger standarden DEPT
tabel fra SCOTT
skema til 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;
/
Jeg inkluderede et opkald til stringify
metode til at vise indholdet af json_object_t
objekt. ApEx foretrækker det måske i json_object_t
datatype - hvis alt du behøver er en streng, behøver du ikke konstruere det objekt, da result
er allerede den streng, du skal bruge.
Resultatet ser således ud:
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.
Bemærk, at strengen ikke er ret formateret - og det burde den ikke være. Det er noget, man kun ville gøre som det sidste trin efter at have modtaget det, ikke fra den "sendende" ende.