各位大侠帮帮忙
基于表“员工数据表”创建AFTER INSERT触发器EmployeeSalary,将插入员工的工资额限制在5000以内。
和基于表“员工数据表”创建BEFORE INSERT触发器EmployeeSalary,将插入员工的工资额限制在5000以内。

解决方案 »

  1.   

    用select 控制一下就行了
    比如:insert into Table values(xx,xxx) select xx,xxx from TableB where salary < 50000
      

  2.   

    create trigger tr_x 
    before insert on x 
    for each row
    declare
    begin
    if :new.sal > 1000 then
    raise_application_error(-20001, 'salary cannot exceed 1000');
    end if;
    end;
      

  3.   

    create trigger tr_x2 
    after insert on x 
    for each row
    declare
    begin
    if :new.sal > 1000 then
    raise_application_error(-20001, 'salary cannot exceed 1000');
    end if;
    end;
      

  4.   

    AFTER和BEFORE结果是一样的,不知道LZ到底要干嘛。
      

  5.   

    create or replace trigger gg 
    alter insert on 员工数据表
    for each row 
    declare 
    begin 
       if :new.names>5000 then 
          raise_replaction_err(-2003,"工资超过5000");
       else
          否则对EmployeeSalary进行更新或插入操作....
       end if 
    end 
      

  6.   

    触发器的一般写法:
     create or replace trigger tg_rl099
     after insert or delete on RL_099_YXFS2
     for each row
     begin
     IF Inserting then
     insert into RL_099_zyzb(rl_id) values(:New.RL_ID);
     commit;
      DBMS_output.put_line('插入的汽机副值日志编号为:'||:new.RL_ID);
      End If;
      If Deleting then
      delete from rl_099_zyzb where rl_id = :old.rl_id;
       DBMS_output.put_line('删除的汽机副值日志编号为:'||:old.RL_ID);
      End If;
     Exception
      When Others Then
      DBMS_output.put_line('出现了意外错误!!');
     end;
      

  7.   

    建议你2个都使用BEFORE.create trigger TR_EmployeeSalary
             before insert or update 
                    of salary--这是你的工资字段
                    on 员工数据表 
             referencing old as old_value 
                             new as new_value 
             for each row 
             when (new_value.salary>5000 ) --当salary字段的值超过5000时触发
      begin 
             raise_replaction_err(-2003,"工资超过5000");   end; 
      

  8.   

    有点错
    create trigger TR_EmployeeSalary
             before insert or update 
                    of salary--这是你的工资字段
                    on 员工数据表 
             referencing old as old_value 
                             new as new_value 
             for each row 
             when (new_value.salary>5000 ) --当salary字段的值超过5000时触发
    begin 
             raise_replaction_err(-2003,'工资超过5000'); end; 
      

  9.   

    create trigger TR_EmployeeSalary
             before insert or update 
                    of salary--这是你的工资字段
                    on 员工数据表 
             referencing old as old_value 
                             new as new_value 
             for each row 
             when (new_value.salary>5000 ) --当salary字段的值超过5000时触发
    begin 
             raise_replaction_err(-2003,'工资超过5000'); end; ---这个不错。
      

  10.   

    1.AFTER INSERT和BEFORE INSERT统一改为update触发;
    2.如果emp_salary+:new.add_salary<=5000,执行此触发器中的工资修改语句;
    3.如果emp_salary+:new.add_salary>5000,不执行此触发器中的工资修改语句,并作相应处理。
      

  11.   

    首先谢谢各位了,各位辛苦了。
    create or replace trigger employeesalary 
    before insert on 员工数据表 
    when (new.工资<0 or new.工资>5000) for each row
    begin  
      RAISE_APPLICATION_ERROR(-20001,'工资超出范围,操作取消!'); 
      end;

    create or replace trigger employeesalary 
    after insert on 员工数据表 
    when (new.工资<0 or new.工资>5000) for each row
    begin  
      RAISE_APPLICATION_ERROR(-20001,'工资超出范围,操作取消!'); 
      end;
    都创建成功,有啥区别没。
      

  12.   

    after表示:在表的一行更改后触发执行改触发器.
    before表示:在表的一行更改前将要更改的那一刻触发执行触发器.
      

  13.   

    这个我知道
    是不是AFTER即使工资超出范围也先插入表中了
    轻举一个简单易懂的BEFORE,和AFTER触发器
      

  14.   

    貌似这里before,after效果都一样伐