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.