Esto es algo que puede hacer en Oracle 12.2. En Oracle 19 puede ser un poco más simple, usando json_object(*)
.
Usando el estándar DEPT
tabla del SCOTT
esquema para ilustración:
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í una llamada a stringify
método para mostrar el contenido del json_object_t
objeto. ApEx puede preferirlo en json_object_t
tipo de datos:si todo lo que necesita es una cadena, no necesita construir ese objeto, ya que result
ya es la cadena que necesitas.
El resultado se ve así:
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.
Tenga en cuenta que la cadena no está bien formateada, y no debería estarlo. Eso es algo que uno solo haría como último paso después de recibirlo, no desde el extremo "transmisor".