考虑一下;update表的触发器在update记录后触发,而贴主要‘重新计算’是不是指再update表呢?这样岂不是循环递归?肯定不行。
解决方案 »
- oracle的distinct问题:为什么按照例子出不来结果??
- 这个SQl语句有点难写,不会写~~呵呵,选择问题
- oracle存储过程 输出参数超过32767个字节的处理方式
- 存储过程报错了,请高手进来看看,谢谢指点!
- 数据库表消失了
- solaris系统对oracle执行sql操作后,如何将select出的信息输出到指定文件呢??
- 求教大侠们一个关于截位的问题!!
- 有关oracle触发器的问题:在一个触发器中调用过程来关闭另一个触发器,怎么来实现这一目的,
- 大讨论---请各位对Oracle DBA认证如何通过,提点好的建议和学习方法,提者有分
- 查询结果行变列的问题请教
- 我很穷,但是我给分
- 请问那里有ORACLE的电子书中可以下载。
select sum(part_price) into price from part;
触发后出错。意思就是在part表的触发器中不能读part表中的记录。
declare
v_status number;
v_status := dbms_pipe.send_message('RECOMPUTE');
然后,在你的客户程序中取得消息,并计算,也可用pro*c, oci等作轮巡
declare
v_status number;
v_status := dbms_pipe.receive_message('RECOMPUTE');
得到消息进行计算
CREATE OR REPLACE TRIGGER Tri_part3
BEFORE INSERT OR UPDATE ON PART
for each row
begin
---使用:new, :old
end;CREATE OR REPLACE TRIGGER Tri_part3
AFTER INSERT OR UPDATE ON PART
DECLARE
tmpVar NUMBER;
BEGIN
tmpVar := 0; Select sum(price) into tmpVar from part;
if (tmpVar) > 200 then
raise_application_error(-20000, 'price is too large');
end if;
END Tri_part3;
1、包头用来存放行级触发器中曾经更新过的行的主键
2、行级的触发器用来设置每次触发行的主键、用:new或:old
3、语句级触发器用来设置每次更新后的值。
例子由于我正在上网无法连上数据库拷贝代码、大概思想就是这样
你可以找找关于触发器变化表的资料。
所以触发器必须是FOR EACH ROW的。
一个行级before触发器,
把新价格放在包变量里面
再建一个语句级after触发器
实现计算总价
求和,
再加上新旧数据的差额select sum(colname) into oldsum from yourtable
if oldsum + new.colname - old.colname > maxvalue then
return false;
end if