我有一个包含一些条目的表。有一个带有 ID 的字段,但它不是唯一的。所以我想获取具有特殊 ID 的所有条目,然后将行插入到 JSON 对象中,该对象最终返回到 JavaScript。这是我当前的代码:
DECLARE
v_json_result_clob CLOB;
BEGIN
SELECT JSON_ARRAY(
JSON_OBJECT(
KEY 'id' VALUE ID,
KEY 'blob_data' VALUE IMAGE RETURNING CLOB
)
RETURNING CLOB
) INTO v_json_result_clob FROM TEST_TABLE WHERE ID = apex_application.g_x01;
apex_json.open_object;
apex_json.write('success', true);
apex_json.write('result', v_json_result_clob);
apex_json.close_object;
EXCEPTION
WHEN OTHERS THEN
apex_json.open_object;
apex_json.write('success', false);
apex_json.write('message', sqlerrm);
apex_json.close_object;
END;
错误:
ORA-01422: exact fetch returns more than requested number of rows
我将 JSON 对象作为 CLOB 返回,因为它包含 BLOB - 这样我就不能超过 varchar 长度限制。
非常感谢您的帮助。
最诚挚的问候,
菲利普。
最佳答案
使用 JSON_ARRAYAGG
将所有行聚合到包含多个对象的单个 JSON 数组中,而不是返回多行,每行包含一个包含单个对象的 JSON 数组。
DECLARE
v_json_result_clob CLOB;
BEGIN
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
KEY 'id' VALUE ID,
KEY 'blob_data' VALUE IMAGE RETURNING CLOB
)
RETURNING CLOB
)
INTO v_json_result_clob
FROM TEST_TABLE
WHERE ID = apex_application.g_x01;
-- ...
END;
/
关于arrays - ORA-01422 : exact fetch returns more than requested number of rows in combination with a json object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74037637/