考虑一下;update表的触发器在update记录后触发,而贴主要‘重新计算’是不是指再update表呢?这样岂不是循环递归?肯定不行。
解决方案 »
- 初学者 麻烦求助一个SQL语句 显示 ORA-00936: missing expression
- 安装OEM Grid 10.2.0.1报opmnctl: opmn start failed
- 高分讨论oracle数据库检索性能
- 在oracle11g运行超长的sql无反应,也不报错
- 面试题,谁会?
- 修改sys密码的问题,急!在线等。
- ALTER TABLE xxx ADD ("rctype" RAW(1) default hextoraw('00') not null),我要把rctype插在 rc字段后,如何处理?
- 谁能解释一下decode和sign的用法?
- 今天刚装ORACLE9I怎么没有看见ORACLESERVICE ORACLE这个服务啊
- 讨论:用oracle的pl/sql写存储过程应注意什么?
- 我很穷,但是我给分
- 请问那里有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