【发布时间】:2015-09-09 17:48:09
【问题描述】:
我的要求是更新表中 input_disp_req ='Y' 的所有行的序列号,并且在更新列时 input_disp_req 请帮助我创建触发器。即使我在更新后使用过,我也收到错误。
ORA-04091(表 fce_template 正在变异。触发器/函数可能看不到它)
CREATE OR REPLACE TRIGGER fce_trigger
AFTER UPDATE of input_disp_req ON fce_template
for each row
BEGIN
update fce_template
set pos_clmn = fce_seq.nextval
where region = :new.region
and mode_name = :new.mode_name
and input_disp_req = 'Y';
END;
如果有其他方法可以做到这一点,请告诉我。请帮我。提前非常感谢:)
有 3 列 input_disp_req、pos_clmn 和 pos_seq...
- 列 input_disp_req 包含值为 Y 或 N(种类
活动/非活动指标)
- 无论 input_disp_req 列中的 Y 还是 N,pos_seq 列都保持序列号
- 列 pos_clmn 根据 input_disp_req = Y 的值维护序列号
所以我的要求是,当我将 input_disp_req 列中的值更新为 N/Y 触发器时,应该 更新所有按 pos_seq 排序的匹配行的 pos_clmn 列的序列值。
input_disp_req=Y 表示传入数据中存在符合我要求的值。
【问题讨论】:
-
这是一个奇怪的要求。为什么仅仅因为一条记录得到更新,你就想用新数字更新表中的几条记录?这看起来很可疑,可能表明您的数据库设计或数据访问概念存在缺陷。
-
因为我想为 input_disp_req ='Y' 的所有记录维护正确的序列号。因为那个序列没有被用于其他目的。
-
什么是“正确的顺序”?没有顺序。一个随机的“Y”记录获得#1,另一个随机选择的“Y”记录获得#2,依此类推。我认为这没有任何意义。
-
@DavidAldridge 还有一列根据我要修改 pos_clmn 列的列的顺序维护不可编辑的序列。例如... pos_seq 对于 input_disp_req = Y 或 N 的序列将不相同,但 pos_clmn 将仅基于 Y 具有序列,以便我保持初始顺序