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

Oracle SQL触发器多个WHEN语句使用错误排查求助

错误根因

Oracle PL/SQL行级触发器语法不支持在定义层并列编写多个WHEN触发子句,原代码同时存在REFERENCING子句语法错误:

  • 单个行级触发器仅允许配置1个顶层WHEN过滤条件,多分支判断必须写在触发器的BEGIN/END执行块内部
  • REFERENCING子句需要显式声明新旧行别名映射,不能直接拼接FOR EACH ROW关键字
  • 原代码中重复判断INSERTING OR UPDATING属于冗余逻辑,触发器本身已限定仅在INSERT、UPDATE操作时触发
修正后完整代码
create or replace TRIGGER TRANS_TASKS_TRIG02
  BEFORE INSERT OR UPDATE ON "TASKS"
  REFERENCING NEW AS NEW OLD AS OLD
  FOR EACH ROW
BEGIN
  IF :NEW.STATUS = 'WIP' THEN
    :NEW.UPDATED_DATE := NEW_TIME(SYSDATE, 'GMT', 'PDT');
  ELSE
    :NEW.UPDATED_DATE := NULL;
  END IF;
END;
/
修正点说明
  • 移除了语法错误的并列顶层WHEN块,将状态判断逻辑迁移到触发器执行块内,通过IF/ELSE分支实现原有逻辑
  • 补全REFERENCING子句的标准写法,注意执行块内引用新行字段必须加:前缀,仅顶层WHEN子句中引用NEW/OLD不需要冒号
  • 删除冗余的操作类型判断,精简代码
  • 逻辑完全匹配原需求:状态为WIP时自动写入PDT时区的当前时间作为更新时间,其余状态下将更新时间置空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:48:22