Đây là điều bạn có thể làm trong Oracle 12.2. Trong Oracle 19, nó có thể đơn giản hơn một chút, sử dụng json_object(*)
.
Sử dụng DEPT
tiêu chuẩn bảng từ SCOTT
lược đồ để minh họa:
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;
/
Tôi đã bao gồm một cuộc gọi đến stringify
để hiển thị nội dung của json_object_t
sự vật. ApEx có thể thích nó hơn trong json_object_t
kiểu dữ liệu - nếu tất cả những gì bạn cần là một chuỗi, bạn không cần phải xây dựng đối tượng đó, vì result
đã là chuỗi bạn cần.
Kết quả như sau:
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.
Lưu ý rằng chuỗi không được định dạng đẹp - và nó không nên như vậy. Đó là điều mà người ta chỉ làm ở bước cuối cùng sau khi nhận nó, không phải từ cuối "truyền".