create or replace trigger trg_a
before update or insert on a for each row
declare
va number;
begin
select max(id) into va from a;
if va<:new.id then
begin
va:=:new.id
update b set id=va where ...;
end;
end trg_a;
/
before update or insert on a for each row
declare
va number;
begin
select max(id) into va from a;
if va<:new.id then
begin
va:=:new.id
update b set id=va where ...;
end;
end trg_a;
/
用before触发
取出 最大的数 跟 新值比较,如果新值更大 则执行更新表操作。
行级触发器不是不能select当前表吗
可以改为语句级触发器加行级触发器加临时表来实现.或者用包来存储变量来实现.CSDN上有很多例子,自己搜查一下.
AFTER INSERT OR UPDATE
ON table2
FOR EACH ROW
DECLARE
v NUMBER;
BEGIN
select max(工资) into v from table1;
if v<:new.工资 then
begin
v:=:new.工资;
update table1 set 工资:=v where..........
end;
end trg_tb2;
/
CREATE OR REPLACE TRIGGER trg_tb2
AFTER INSERT OR UPDATE
ON table2
FOR EACH ROW
DECLARE
v NUMBER;
BEGIN
select max(工资) into v from table1;
if v<:new.工资 then
v:=:new.工资;
update table1 set 工资:=v where..........
end if;
end trg_tb2;
/
可是delete的时候呢 不select本表 怎么知道谁的工资最高呢
create or replace trigger trigger_name
after insert or update or delete on tablename
for each row
begin
if inserting then
...
if updating then
....
if deleting then
....
end if;
end;
上面的几个trigger哪个也不行啊 最少delete的时候都得select当前表吧有个朋友给了个思路 在trigger里用类似begin transaction...end transaction这样一个独立的事务
就能select当前表了 不知道准确的语法是什么