Hier is iets dat u kunt doen in Oracle 12.2. In Oracle 19 is het misschien wat eenvoudiger, met behulp van json_object(*) .
Gebruik van de standaard DEPT tabel uit de SCOTT schema ter illustratie:
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;
/
Ik heb een oproep toegevoegd aan de stringify methode om de inhoud van de json_object_t . te tonen object. ApEx geeft er misschien de voorkeur aan in json_object_t datatype - als alles wat je nodig hebt een string is, hoef je dat object niet te construeren, aangezien result is al de string die je nodig hebt.
Het resultaat ziet er als volgt uit:
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.
Merk op dat de string niet mooi geformatteerd is - en dat zou ook niet zo moeten zijn. Dat is iets wat je alleen zou doen als de laatste stap na ontvangst, niet vanaf het "zendende" einde.