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

如何在触发器中从子类型获取:new值并修正同省行计数逻辑?

修正触发器以统计同省份 Distributor 记录

原触发器的错误在于对:new中子类型属性的引用语法错误,TREAT函数需要直接作用于:new.address,而非写成:new.treat(...)的形式。

修正后的完整触发器代码

create or replace trigger sequence_num_trigg before insert on Distributor for each row 
declare counter NUMBER;
BEGIN
    select count(*) INTO counter 
    from distributor 
    where treat(address as distributor_address_ty).province = treat(:new.address as distributor_address_ty).province;
    
    :new.seq_no := case when counter != 0 then 1 + counter else 0 end;
END; 

关键修正点

  • 对于新插入的记录,正确获取子类型省份属性的写法是 treat(:new.address as distributor_address_ty).province:先通过TREAT将:new.address转换为distributor_address_ty子类型,再访问其province属性。
  • 原代码中:new.treat(address as distributor_address_ty).province的写法不符合PL/SQL语法规范,这是导致错误的核心原因。
  • 额外优化:将原有的if-else逻辑替换为CASE表达式,让代码更简洁紧凑,逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:02:04