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

Oracle Apex REST数据源:在触发器中转换价格为数值并新增列

解决方案:在现有触发器中实现价格转换与计算

完全可以在现有的TR_MAINTAIN_LINES触发器内完成这两个需求,无需创建单独触发器。触发器本身的职责就是维护LINES表数据,在原有JSON提取逻辑中直接加入价格转换与计算逻辑,既高效又能避免多触发器带来的执行顺序问题。

具体实现示例

假设触发器中原本通过JSON_TABLE提取ORDERS表的LINES JSON数组并同步到LINES表,只需修改数据插入/更新的字段逻辑:

-- 触发器内处理INSERT/UPDATE的核心逻辑示例
-- 以INSERT为例,UPDATE逻辑同理
INSERT INTO LINES (
  order_id,
  line_id,
  quantity,
  price,
  total_price,
  unit_price
)
SELECT
  :new.order_id,
  j.line_id,
  j.quantity,
  j.price, -- 保留原字符串格式的价格(若不需要可删除该字段)
  -- 将带$符号的价格转换为数值型
  TO_NUMBER(j.price, '$999,999,999.99') AS total_price,
  -- 计算单价,处理quantity为0的情况避免报错
  TO_NUMBER(j.price, '$999,999,999.99') / NULLIF(j.quantity, 0) AS unit_price
FROM JSON_TABLE(
  :new.lines,
  '$[*]' COLUMNS (
    line_id NUMBER PATH '$.line_id',
    quantity NUMBER PATH '$.quantity',
    price VARCHAR2(50) PATH '$.price'
  )
) j;

关键注意事项

  • 除以0防护:用NULLIF(j.quantity, 0)确保当quantity为0时,unit_price返回NULL而非触发除以0错误。
  • 格式匹配:确认TO_NUMBER的格式模型'$999,999,999.99'与API返回的price字符串格式完全匹配,若存在其他格式(如无千分位、不同小数位数)需调整格式模型。
  • UPDATE逻辑复用:如果触发器包含UPDATE处理,需在更新LINES表的语句中应用相同的价格转换与计算逻辑,保持数据一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:50:34