触发以查看View中的总值字段

时间:2013-05-07 04:40:31

标签: sql oracle

如何创建一个触发器来检查创建的View的一个字段。基本上,我的View表中的字段显示添加到数据库的产品总量。触发器将具有指定的最大总量,因此当添加到数据库的产品总数达到最大值时,触发器应提醒用户并使其无法添加更多产品。

顺便说一下,我不确定用视图设置触发器是否是实现目标的最佳方式。 我正在使用Oracle 11g

2 个答案:

答案 0 :(得分:1)

我不确定你的视图是怎样的,但是你可以设置一个AFTER INSERT或UPDATE TRIGGER(所以,不是每个行触发器)可以像

一样
v_amt number;
BEGIN
  select sum(amount) into v_amt from products_table;
  if v_amt > certain_amount then raise_application_error(-200001,'You cannot add more than '||certain_amount||' amount into the database');
  end if;
END;

此外,您可以在应用程序层,插入之后和提交之前执行此操作。但是,如果您有许多数据源,则对数据库层的约束更好。

答案 1 :(得分:1)

听起来您希望触发器逻辑基于表的多行,并处理各种会话对表的同时修改。

这不起作用,因为每个会话在提交之前都看不到其他人所做的更改,因此两个会话可以同时向系统添加行,看看它们本身不超出产品限制,并且提交。更改组合可以超出限制。

这样做的唯一安全方法是序列化对表的修改(DBMS_Lock是最好的机制),或者使用快速提交刷新物化视图来将要检查的数量与要检查的单个行相加约束放在该列上(这实际上也是一个序列化机制)。