如题:用触发器实现两个表中数据的更新!
      A(人员流水号(主键),姓名,性别(1:男,2:女,3:未知),身份证号码,年龄,出生日期,籍贯,民族)
      C(人员流水号(主键,外键:与A关联),基本工资,生活补贴,其他)
     
 b、利用触发器判断当A表中人员年龄长1岁后此人生活补贴加20元,基本工资加200元;
  (提示:注意使用oracle中的:new和:old两个临时表和dual表);新手,请大家提点提点啊!本人现在还是穷人

解决方案 »

  1.   

    create or replace trigger tri_bbefore update of 年龄 on A declarebegin
        if (:new.年龄-:old.年龄 = 1) then
            update B set 生活补贴 = 生活补贴 + 20,基本工资 = 基本工资 + 200 where 人员流水号 = :old.人员流水号;
        end if;
    end;
    题表述不清楚,如果一次修改年龄直接长2岁,是工资+400还是不加?如果年龄改小了呢?上面只写了年龄长一岁的操作,其余时候不操作 
      

  2.   

    create or replace trigger add_sal before update of 年龄 on A for each row
    begin
    if :new.年龄-:old.年龄=1 then 
    update B set 基本工资=基本工资+200,生活补贴=生活补贴+20 where 人员流水号=:.人员流水号;
    end if;
    end;
      

  3.   


    --少写了个new
    create or replace trigger add_sal before update of 年龄 on A for each row
    begin
    if :new.年龄-:old.年龄=1 then 
    update B set 基本工资=基本工资+200,生活补贴=生活补贴+20 where 人员流水号=:new.人员流水号;
    end if;
    end;
      

  4.   

    create or replace trigger add_sal before update of 年龄 on A for each row
    begin
    if :new.年龄-:old.年龄>=1 then 
    update B set 基本工资=基本工资+200*(:new.年龄-:old.年龄),生活补贴=生活补贴+20*(:new.年龄-:old.年龄) where 人员流水号=:new.人员流水号;
    end if;
    end;
      

  5.   

    where 人员流水号=:new.人员流水号;我想问一下,后面的这两个变量各是什么意思?:new.人员流水号代表什么意思?
      

  6.   


    人员流水号        代表B中的主键字段 人员流水号
    :new.人员流水号  代表A表中被更新年龄的流水号。
      

  7.   

    建议楼主学习下Oracle里的触发器知识
      

  8.   

    恩,现在正在学oracle中,所有会有很多菜鸟级的问题,希望大家多包容!
      

  9.   


    因为A表被更新的一条记录,触发器就是要更新B表中与A表对应的那一条记录。如果用A.流水号就等于更新了B表中所有的记录了。
    例如:A表中流水号为5的记录被修改了年龄,那么 where 人员流水号=:new.人员流水号 中:new.人员流水号 就是5