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;
/

解决方案 »

  1.   

    说明:
    用before触发
    取出 最大的数 跟 新值比较,如果新值更大 则执行更新表操作。
      

  2.   

    谢谢 bzszp(SongZip) !不过 .. select max(id) into va from a; 这样可以吗
    行级触发器不是不能select当前表吗
      

  3.   

    行级触发器是不能select当前表的.
    可以改为语句级触发器加行级触发器加临时表来实现.或者用包来存储变量来实现.CSDN上有很多例子,自己搜查一下.
      

  4.   

    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
       begin
         v:=:new.工资;
         update table1 set 工资:=v where..........
       end;   
    end trg_tb2;
    /
      

  5.   

    sorry,应该是:
    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;
    /
      

  6.   

    谢谢 sos_help(浊世清风) 可能我表达的不太清楚 实际上我希望在table1中存储的是某部门工资最高的职员的ID 而不是工资而且 select max(工资) into v from table1; 这个取的是所有部门最高的工资吧
      

  7.   

    事实上并没解决啊 insert或update的时候当然没问题 
    可是delete的时候呢 不select本表 怎么知道谁的工资最高呢
      

  8.   

    那在delete的时候判断就可以了.
    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;
      

  9.   

    我有点晕我的问题是行级触发器里怎么才能select 当前表
    上面的几个trigger哪个也不行啊 最少delete的时候都得select当前表吧有个朋友给了个思路 在trigger里用类似begin transaction...end transaction这样一个独立的事务
    就能select当前表了 不知道准确的语法是什么
      

  10.   

    行级触发器里怎么不可以select 当前表,我试了下,好象没有什么问题。