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

Hvordan vælger man flere rækker i en JSON-strengvariabel?

Her er noget, du kan gøre i Oracle 12.2. I Oracle 19 kan det være lidt enklere ved at bruge json_object(*) .

Bruger standarden DEPT tabel fra SCOTT skema til illustration:

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

Jeg inkluderede et opkald til stringify metode til at vise indholdet af json_object_t objekt. ApEx foretrækker det måske i json_object_t datatype - hvis alt du behøver er en streng, behøver du ikke konstruere det objekt, da result er allerede den streng, du skal bruge.

Resultatet ser således ud:

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.

Bemærk, at strengen ikke er ret formateret - og det burde den ikke være. Det er noget, man kun ville gøre som det sidste trin efter at have modtaget det, ikke fra den "sendende" ende.




  1. MySQL starter ikke på XAMPP

  2. Hvordan tilføjer man et SSL-certifikat (ca-cert) til node.js miljøvariabler for at oprette forbindelse til Digital Ocean Postgres Managed Database?

  3. Hvordan får man den aktuelle ikrafttrædelsesdato i Oracle?

  4. Filnavn i WHERE-sætningen i Mysql returnerer intet