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

Oracle APEX中实现教师表删除时同步删除顾问表的触发器问题

修正后的Oracle触发器实现

原触发器存在几个明显问题,以下是错误点说明和修正后的代码:

错误点分析

  • 表名不匹配:你的实际表是teachers和advisers,触发器里写的TEACHER、ADVISER属于笔误,需与实际表名严格一致(Oracle中若建表时用小写,需加双引号,否则默认大写)。
  • 被删除行引用错误:行级触发器中,不能直接通过表名获取被删除的主键值,必须使用:OLD伪记录访问删除前的字段值。
  • 冗余的自治事务:pragma autonomous_transaction会让触发器在独立事务中执行,导致主事务回滚时,触发器的删除操作已提交,造成数据不一致,此处完全不需要该声明。
  • 字段名不匹配:你明确说明teachers的主键是Teachers_id且为advisers的外键,但原触发器用了T_id,需对应实际外键字段名。

修正后的触发器代码

如果advisers的外键字段就是Teachers_id:

create or replace TRIGGER delete_teacher 
AFTER DELETE ON teachers  
FOR EACH ROW
BEGIN
    DELETE FROM advisers  
    WHERE advisers.Teachers_id = :OLD.Teachers_id;  
END;
/

如果advisers的外键字段实际是T_id(比如你给外键起了别名),则代码调整为:

create or replace TRIGGER delete_teacher 
AFTER DELETE ON teachers  
FOR EACH ROW
BEGIN
    DELETE FROM advisers  
    WHERE advisers.T_id = :OLD.Teachers_id;  
END;
/

额外说明

  • 若你的表是用小写字母创建的(例如create table teachers(...)),则触发器中的表名需要用双引号包裹,比如"teachers"和"advisers"。
  • 去掉自治事务后,触发器的删除操作会和主表的删除操作处于同一事务中,确保数据一致性:如果主删除操作回滚,触发器的删除操作也会同步回滚。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:15:34