Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie wählt man mehrere Zeilen in eine JSON-String-Variable aus?

Folgendes können Sie in Oracle 12.2 tun. In Oracle 19 kann es etwas einfacher sein, indem Sie json_object(*) verwenden .

Unter Verwendung des Standard-DEPT Tabelle aus dem SCOTT Schema zur Veranschaulichung:

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

Ich habe einen Aufruf an stringify eingefügt -Methode, um den Inhalt von json_object_t anzuzeigen Objekt. ApEx bevorzugt es möglicherweise in json_object_t Datentyp - wenn alles, was Sie brauchen, ein String ist, brauchen Sie dieses Objekt nicht zu konstruieren, da result ist bereits die Zeichenfolge, die Sie benötigen.

Das Ergebnis sieht so aus:

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.

Beachten Sie, dass die Zeichenfolge nicht schön formatiert ist - und das sollte sie auch nicht sein. Das ist etwas, was man nur als letzten Schritt nach dem Empfang tun würde, nicht von der "übertragenden" Seite.