Oto coś, co możesz zrobić w Oracle 12.2. W Oracle 19 może to być nieco prostsze, używając json_object(*)
.
Korzystanie ze standardowego DEPT
tabela z SCOTT
schemat ilustracji:
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;
/
Dołączyłem wywołanie stringify
metoda pokazująca zawartość json_object_t
obiekt. ApEx może preferować to w json_object_t
typ danych - jeśli wszystko czego potrzebujesz to string, nie musisz konstruować tego obiektu, ponieważ result
to już ciąg, którego potrzebujesz.
Wynik wygląda tak:
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.
Zauważ, że ciąg nie jest dość sformatowany - i nie powinien być. Jest to coś, co można zrobić tylko jako ostatni krok po jego otrzymaniu, a nie od końca „nadawania”.