Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como selecionar várias linhas em uma variável de string JSON?


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