用Oracle 9i创建一个触发器tr_emp_sal,当进行update操作时,员工的工资只能涨不能降,不允许删除员工记录,代码如下:
create or replace trigger sys.tr_emp_sal before update or delete on scott.emp
for each row
begin
   emp.sal:=emp.sal+1;
   DBMS_OUTPUT.PUT_LINE('姓名:'||emp.ename);
   DBMS_OUTPUT.PUT_LINE('工资:'||emp.sal);
end tr_emp_sal;请问各位哪里出错了,请帮我看看?

解决方案 »

  1.   

    emp.sal:=emp.sal+1;
    不能这么写,参考如下...
    UPDATE EMP SET emp.sal=emp.sal+1 WHERE  ....
      

  2.   

    给你个例子,你看看.周三和周日,并且时间不在8-18点之间不能插入数据的触发器
    create or replace trigger tri_emp
    before insert
    on emp
    begin
    if(to_char(sysdate,'DAY') in ('星期三','星期日'))
    or (to_char(sysdate,'HH24') not between 8 and 18) then
    raise_application_error(-20001,'不是上班时间');
    end if;
    end;
      

  3.   

    create or replace trigger sys.tr_emp_sal before update or delete on scott.emp
    for each row
    begin
      :new.emp.sal:=:old.emp.sal+1;
      DBMS_OUTPUT.PUT_LINE('姓名:'||emp.ename);
      DBMS_OUTPUT.PUT_LINE('工资:'||emp.sal);
    end tr_emp_sal;