哦。需求写错了,更改一下:
============================
要求: 上面A处完成语句,在B处调用时,如果加入数据以后Member表中的分数和>1000,则不允许添加,如果加入后没有超过,则可以添加。 也就是说,B处的2条数据,前一条是可以成功的(添加后为1000),后一条不能成功(添加后为1500),A处的语句如何写?请高手帮忙。
============================
要求: 上面A处完成语句,在B处调用时,如果加入数据以后Member表中的分数和>1000,则不允许添加,如果加入后没有超过,则可以添加。 也就是说,B处的2条数据,前一条是可以成功的(添加后为1000),后一条不能成功(添加后为1500),A处的语句如何写?请高手帮忙。
改用其他方法吧!
{before|after|instead of} event
ON {table_or_view_name|DATABASE}
[FOR EACH ROW[WHEN condition>
trigger_body
2\触发器对自己表进行触发修改判断就比较混乱。
建议利用另一个表来触发。
after INSERT
ON Member
as
insert into sumcredit select sum(credit) from tablename;
if sumcredit>1000 then
delete from tablename where memberid=:new.memberid;
end ifend TRIG_MEMBER_TEST ;自己想的,如果插入后,和>1000就把刚插入的记录删除!不知道行不行!
CREATE OR REPLACE TRIGGER TRIG_MEMBER_TEST
BEFORE INSERT
ON Member
FOR EACH ROW
DECLARE totalcredit Number(10);
BEGIN
SELECT Sum(credit)+:new.credit INTO totalcredit FROM Member; --totalcredit表示假如添加成功的总分值。
if totalcredit>1500 then
RAISE_APPLICATION_ERROR (-20001,SQLERRM); --这里,我现在只能引起一个错误窗,却没能阻止它增加记录。我对RAISE语句也不熟。
end if;
END;
/
select *
from membercreate or replace trigger T_test
instead of insert on v_test
for each row
declare
-- local variables here
begin
if /*符合条件*/ then
return;
else
insert into Member/**/
end if;
end T_test;
建一个同样结构的视图,使用Instead Of的触发处理,
insert into v_test (memberid, credit)values(5,500);
对表Member的Insert,Update,Delete操作全部转成对视图V_test的操作