Oracle
 sql >> Database >  >> RDS >> Oracle

Come selezionare più righe in una variabile stringa JSON?

Ecco qualcosa che puoi fare in Oracle 12.2. In Oracle 19 potrebbe essere un po' più semplice, usando json_object(*) .

Usando lo standard DEPT tabella dal SCOTT schema per l'illustrazione:

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;
/

Ho incluso una chiamata a stringify metodo per mostrare il contenuto di json_object_t oggetto. ApEx potrebbe preferirlo in json_object_t tipo di dati - se tutto ciò di cui hai bisogno è una stringa, non è necessario costruire quell'oggetto, poiché result è già la stringa che ti serve.

Il risultato è simile al seguente:

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.

Nota che la stringa non è abbastanza formattata e non dovrebbe esserlo. Questo è qualcosa che si dovrebbe fare solo come ultimo passaggio dopo averlo ricevuto, non dall'estremità "trasmittente".