本帖最后由 ivorycoast 于 2012-07-31 21:27:35 编辑

解决方案 »

  1.   


    --又是体力活,呵呵
    create or replace trigger tb1_insupd
    before insert 
    on tb1
    for each row
    declare 
    v_cou int := 0;
    v_cou1 int := 0;
    v_power int := 0;
    begin
    select count(1) into v_cou from tb2 where 部门=:new.部门;
    select count(1) into v_cou1 from tb1 where 部门=:new.部门;
    if v_cou1<>0 then
    select max(权重) into v_power from tb1 where 部门=:new.部门 group by 部门;
    end if;
    if v_cou<>0 and v_power<:new.权重 then
            update tb2 set 姓名=:new.姓名 where tb2.部门=:new.部门;
        elsif v_cou=0 then
            insert into tb2 values(:new.部门,:new.姓名);
    end if;
    end;
    /
      

  2.   


    --沒有錯噢,是不是你還有其他限制,給你看結果,不過我這是繁體
    SQL> insert into tb1 values('部門A',35,'王五');已建立 1 個資料列.SQL> insert into tb1 values('部門C',10,'李明');已建立 1 個資料列.SQL> insert into tb1 values('部門C',20,'王強');已建立 1 個資料列.SQL> insert into tb1 values('部門D',20,'劉八');已建立 1 個資料列.SQL> commit;確認完成.SQL> select * from tb1;部門                       權重 姓名                                            
    -------------------- ---------- --------------------                            
    部門A                        35 王五                                            
    部門C                        10 李明                                            
    部門C                        20 王強                                            
    部門D                        20 劉八                                            SQL> select * from tb2;部門                 姓名                                                       
    -------------------- --------------------                                       
    部門A                王五                                                       
    部門C                王強                                                       
    部門D                劉八          
      

  3.   

    CREATE OR REPLACE TRIGGER Tb1_Trg AFTER INSERT OR UPDATE OR DELETE ON Tb1
      FOR EACH ROW
    DECLARE
      pragma AUTONOMOUS_TRANSACTION;
    BEGIN
      ---插入tb1中多出的部门数据,并且是qz最大的数据
      INSERT INTO Tb2
        SELECT Dname, NAME
          FROM Tb1 a
         WHERE (a.Qz, Dname) IN
               (SELECT MAX(Qz), Dname FROM Tb1 GROUP BY Dname)
           AND NOT EXISTS
         (SELECT 1 FROM Tb2 b WHERE a.Dname = b.Dname);
         COMMIT;
      ---更新tb1每个部门最大值对应的数据到tb2中
      UPDATE Tb2 b
         SET (b.Dname, b.NAME) = (SELECT a.Dname, a.NAME
                                    FROM Tb1 a
                                   WHERE (a.Qz, a.Dname) IN
                                         (SELECT MAX(c.Qz), Dname
                                            FROM Tb1 c
                                           GROUP BY c.Dname)
                                     AND a.Dname = b.Dname);
      --子查询求得tb1每个部门最大值对应的部门,名称
      COMMIT;
    END;
      

  4.   

    create or replace trigger tb1_operate
    before insert on tb1
    for each row
    declare
      v_weight number;
      v_count  number;
    begin
      select max(权重) into v_weight from tb1 where 部门 = :new.部门;
      select count(*) into v_count from tb1 where 部门 = :new.部门;
      if v_count = 0 then
        insert into tb2 (部门, 姓名) values (:new.部门, :new.姓名);
      elsif v_weight < :new.权重 then
        update tb2 set 姓名 = :new.姓名 where 部门 = :new.部门;
      end if;
    end;