oracle - 如何修复 ORA-04091:表正在变异,触发器/函数可能看不到它?
问题描述
我想创建一个触发器,使 trgr 的值等于同一行上 seq+100 的值。这就是我所做的,但我不断收到错误“表正在变异,触发器/函数可能看不到它”。
CREATE OR REPLACE TRIGGER update_tgr
AFTER INSERT ON challenge FOR EACH ROW
BEGIN
UPDATE challenge
SET trgr = :NEW.seq + 100
WHERE seq = :NEW.seq;
END;
我能做些什么来修复它?
解决方案
Virtual Column
如果您的数据库版本是 11g+,我认为创建一个更好的选择。因为不需要在磁盘上存储已经可以计算的列。trgr
与传统定义样式不同,这可以防止为列 ( ) 插入错误值的可能性。然后,您可以重新创建表,例如
CREATE TABLE challenge (
.....
seq INT,
trgr AS (seq + 100), -- [VIRTUAL]
----
);
无需担心已经根据表达式(INT
)的结果确定的数据类型。可以像普通表一样查询
推荐阅读
- vue.js - 就设计而言,在 Vue 中使用插槽是一个坏主意吗?
- javascript - 语法荧光笔无法更新文本
- json - next.js 文件加载器的问题,从 JSON 文件加载图像(netlify cms)
- angular - 抛出错误后如何避免执行concatMap?
- python - Pandas DataFrame 跳过行
- python - PyTorch 中基于边界框提取补丁的优化方法
- java - 这个菜单我哪里错了
- excel - 如何在 Power BI 中创建以下公式 Excel 以及 Excel 公式中的 -100% 是什么意思?
- java - 如何在不使用 if 的情况下从验证变量返回 bool?
- storybook - MDX 和装饰器与 Storybook 6.1+