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".