我试图使用下面的 PLSQL 从表中获取数据,但在我的例子中,我有大约 30 条记录,当我获取时,出现以下错误。请帮助我,因为我是 PLSQL 新手。 我只需要 JSON_OBJECT_T 格式的响应,但我想避免此错误消息。请帮忙
DECLARE
l_json_object JSON_OBJECT_T;
l_json CLOB;
BEGIN
SELECT
JSON_OBJECT(
KEY 'employees' VALUE
JSON_ARRAYAGG(
JSON_OBJECT(KEY 'empno' VALUE id
,KEY 'ename' VALUE name
,KEY 'job' VALUE email_id)
ORDER BY id)
RETURNING CLOB)
INTO l_json
FROM employee_tbl;
-- now convert clob to JSON_OBJECT_T
l_json_object := JSON_OBJECT_T.PARSE(l_json);
-- or...this works too
-- l_json_object := JSON_OBJECT_T(l_json);
-- check if value is correct
dbms_output.put_line(l_json_object.to_clob);
END;
/
预期输出:
{"employees":[{"empno":1065,"ename":"Abu","job":"[email protected]"},{"empno":1066,"ename":"Umar","job":"[email protected]"}]}
表格示例:
CREATE TABLE employee_tbl (id, name, email_id) AS
SELECT 1065, 'Abu', '[email protected]' FROM DUAL UNION ALL
SELECT 1066, 'Umar', '[email protected]' FROM DUAL
您需要数组聚合来生成 CLOB,以及最终的外部 JSON 对象;所以
ORDER BY id)
RETURNING CLOB)
INTO l_json
成为
ORDER BY id
RETURNING CLOB)
RETURNING CLOB)
INTO l_json
进行整个查询:
SELECT
JSON_OBJECT(
KEY 'employees' VALUE
JSON_ARRAYAGG(
JSON_OBJECT(KEY 'empno' VALUE id
,KEY 'ename' VALUE name
,KEY 'job' VALUE email_id)
ORDER BY id
RETURNING CLOB)
RETURNING CLOB)
INTO l_json
FROM employee_tbl;
fiddle 使用扩展/重复数据来重现初始错误,并修改输出,以便显示 CLOB 结果的一部分。