sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo seleccionar varias filas en una variable de cadena JSON?

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".