arrays - ORA-01422 : exact fetch returns more than requested number of rows in combination with a json object

标签 arrays json plsql oracle-apex

我有一个包含一些条目的表。有一个带有 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;
/

fiddle

关于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/

相关文章:

javascript - 意外的 token JSON.parse

oracle - PL/SQL : ORA-44201: cursor needs to be reparsed

java - 在 PL/SQL 中复制 Java 的 Base64 解码

database - PL/SQL 用表中的数据填充对象

php - 从数组中选择每第 n 个项目

php - 将数组存储在 MySQL 表中

javascript - 如何使用 knockout 和工具提示在数组对象之间添加分隔符

arrays - Ruby 匹配数组中的字符串

javascript - 使用 addEventListener 和 getElementsByClassName 传递元素 id

php - 使用 PHP 和 MySQL 删除数据库中的行