sql >> Database >  >> RDS >> Oracle

Hoe meerdere rijen in een JSON-tekenreeksvariabele te selecteren?

Hier is iets dat u kunt doen in Oracle 12.2. In Oracle 19 is het misschien wat eenvoudiger, met behulp van json_object(*) .

Gebruik van de standaard DEPT tabel uit de SCOTT schema ter illustratie:

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

Ik heb een oproep toegevoegd aan de stringify methode om de inhoud van de json_object_t . te tonen object. ApEx geeft er misschien de voorkeur aan in json_object_t datatype - als alles wat je nodig hebt een string is, hoef je dat object niet te construeren, aangezien result is al de string die je nodig hebt.

Het resultaat ziet er als volgt uit:

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.

Merk op dat de string niet mooi geformatteerd is - en dat zou ook niet zo moeten zijn. Dat is iets wat je alleen zou doen als de laatste stap na ontvangst, niet vanaf het "zendende" einde.




  1. Activeer alternatieven voor twee tabellen die elkaar wederzijds moeten bijwerken

  2. MySQL:sorteer '1e' VOOR '101e'

  3. Hoe kan ik een MySQL AutoIncrement resetten met een MAX-waarde uit een andere tabel?

  4. mysql selecteer query waarbij datum =... geen gegevens retourneren