Aqui está algo que você pode fazer no Oracle 12.2. No Oracle 19 pode ser um pouco mais simples, usando
json_object(*)
. Usando o padrão
DEPT
tabela do SCOTT
esquema para ilustração: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;
/
Incluí uma chamada para o
stringify
método para mostrar o conteúdo do json_object_t
objeto. ApEx pode preferir em json_object_t
tipo de dados - se tudo que você precisa é uma string, você não precisa construir esse objeto, pois result
já é a string que você precisa. O resultado fica assim:
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.
Observe que a string não está bem formatada - e não deveria estar. Isso é algo que se faria apenas como o último passo depois de recebê-lo, não do lado "transmissor".