sql >> Databasteknik >  >> RDS >> Oracle

Hur väljer man flera rader i en JSON-strängvariabel?

Här är något du kan göra i Oracle 12.2. I Oracle 19 kan det vara lite enklare med json_object(*) .

Använder standarden DEPT tabell från SCOTT schema för 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;
/

Jag inkluderade ett anrop till stringify metod för att visa innehållet i json_object_t objekt. ApEx kanske föredrar det i json_object_t datatyp - om allt du behöver är en sträng behöver du inte konstruera det objektet, eftersom result är redan den sträng du behöver.

Resultatet ser ut så här:

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.

Observera att strängen inte är snyggt formaterad - och det borde den inte vara. Det är något man bara skulle göra som det sista steget efter att ha tagit emot det, inte från den "sändande" änden.




  1. AsyncQuery med postgresql och dapper med npqsql

  2. Kör SSIS-paketet som SQLAgent-jobb

  3. SQL Server 2008 Generera en serie datumtider

  4. Hur frågar jag javascript vänta på att mysql tilldelar värde till php-variabel?