参考:https://blog.youkuaiyun.com/pan_tian/article/details/7675800
参考:https://blog.youkuaiyun.com/hong10086/article/details/69666863
错误原因:触发器建立在表上时,当被触发时,表被锁定,不能用于查询。
解决办法:
1、考虑是否可通过表的关联获取到想要的其他信息(其他表中),通过 :OLD.XXID 外键关联获取
2、使用
PRAGMA AUTONOMOUS_TRANSACTION 自治事务,并按情况进行 commit 或 rollback
需要注意以下几点
第一,这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。
比如主程序中删除一些记录,但尚未提交事务时,自治事务仍可查到相应数据记录
第二,在自治事务中,commit或者rollback只会提交或回滚当前自治事务中的DML,不会影响到Main程序中的DML。
第三,自治事务有可能破坏数据完整性
本次使用场景:
A表主键作为B表外键,而触发器在处理删除数据时,需要获取B表中的信息录入到日志表中。
若要删除A中数据需先将B中数据删除,否则会与外键约束冲突
使用自制事务可以获取在主程序外获取到已删除的B表信息
问题:需保证程序中的删除正确,不会出现直接删除A表数据的情况,否则将向日志表中插入一条错误日志记录