You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PLSQL存储过程生成JSON格式错误,如何修正receivablesInvoiceLines结构?

修正PL/SQL存储过程中receivablesInvoiceLines的JSON结构生成逻辑

问题根源是当前代码循环时将每个字段单独封装为JSON对象并添加到数组,导致receivablesInvoiceLines数组包含多个零散的单字段对象,而非每个元素都是聚合所有目标字段的完整对象。以下是修正逻辑:

错误代码示例(问题场景)

通常错误写法是循环中逐个append单字段JSON对象:

-- 错误:数组元素为单字段JSON对象
FOR rec IN cur_invoice_lines LOOP
  l_children.append(JSON_OBJECT('LineNumber' VALUE rec.line_num));
  l_children.append(JSON_OBJECT('ItemNumber' VALUE rec.item_code));
  l_children.append(JSON_OBJECT('Description' VALUE rec.item_desc));
  l_children.append(JSON_OBJECT('Quantity' VALUE rec.qty));
  l_children.append(JSON_OBJECT('UnitSellingPrice' VALUE rec.unit_price));
END LOOP;

修正后的代码实现

方式1:使用JSON_OBJECT直接构建完整行对象

循环处理每条发票明细时,先构建包含所有目标字段的单个JSON对象,再将该对象添加到数组:

-- 正确:数组元素为聚合所有字段的完整JSON对象
FOR rec IN cur_invoice_lines LOOP
  -- 构建单条明细的完整JSON对象
  l_line_json := JSON_OBJECT(
    'LineNumber' VALUE rec.line_num,
    'ItemNumber' VALUE rec.item_code,
    'Description' VALUE rec.item_desc,
    'Quantity' VALUE rec.qty,
    'UnitSellingPrice' VALUE rec.unit_price
  );
  -- 将完整对象添加到数组
  l_children.append(l_line_json);
END LOOP;

方式2:使用JSON_OBJECT_T API(Oracle 12c+)

若使用Oracle原生JSON对象类型操作,逻辑如下:

DECLARE
  l_lines_arr JSON_ARRAY_T := JSON_ARRAY_T();
  l_line_obj JSON_OBJECT_T;
BEGIN
  FOR rec IN (
    SELECT line_num, item_code, item_desc, qty, unit_price 
    FROM your_invoice_lines_table
  ) LOOP
    -- 初始化单行JSON对象
    l_line_obj := JSON_OBJECT_T();
    -- 为对象添加所有字段
    l_line_obj.put('LineNumber', rec.line_num);
    l_line_obj.put('ItemNumber', rec.item_code);
    l_line_obj.put('Description', rec.item_desc);
    l_line_obj.put('Quantity', rec.qty);
    l_line_obj.put('UnitSellingPrice', rec.unit_price);
    -- 将完整对象追加到数组
    l_lines_arr.append(l_line_obj);
  END LOOP;

  -- 将生成的数组嵌入到主JSON结构中
  l_main_json.put('receivablesInvoiceLines', l_lines_arr);
END;

核心要点

  • 每条发票明细对应一个独立的JSON对象,所有目标字段都封装在该对象内
  • 循环内仅执行一次append操作,确保数组的每个元素都是包含LineNumber、ItemNumber、Description、Quantity、UnitSellingPrice的完整结构

内容的提问来源于stack exchange,提问作者virtual transfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:47:04