Ето нещо, което можете да направите в Oracle 12.2. В Oracle 19 може да е малко по-просто, използвайки json_object(*)
.
Използвайки стандартния DEPT
таблица от SCOTT
схема за илюстрация:
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;
/
Включих извикване на stringify
метод за показване на съдържанието на json_object_t
обект. ApEx може да го предпочете в json_object_t
тип данни - ако всичко, от което се нуждаете, е низ, не е необходимо да конструирате този обект, тъй като result
вече е низът, от който се нуждаете.
Резултатът изглежда така:
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.
Имайте предвид, че низът не е добре форматиран - и не трябва да бъде. Това е нещо, което човек би направил само като последна стъпка след получаването му, а не от "предаващия" край.