Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment sélectionner plusieurs lignes dans une variable de chaîne JSON ?

Voici quelque chose que vous pouvez faire dans Oracle 12.2. Dans Oracle 19, cela peut être un peu plus simple, en utilisant json_object(*) .

Utilisation de la norme DEPT tableau du SCOTT schéma pour 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;
/

J'ai inclus un appel au stringify méthode pour afficher le contenu du json_object_t objet. ApEx peut le préférer dans json_object_t type de données - si tout ce dont vous avez besoin est une chaîne, vous n'avez pas besoin de construire cet objet, puisque result est déjà la chaîne dont vous avez besoin.

Le résultat ressemble à ceci :

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.

Notez que la chaîne n'est pas assez formatée - et elle ne devrait pas l'être. C'est quelque chose que l'on ne ferait qu'en dernière étape après l'avoir reçu, pas du côté "transmetteur".