create or replace trigger print_salary_change
before delete or insert or update on emp
for each row
declare
salary_balance number;
begin
salary_balance=:new.salary=:old.salary;
dbms_output.put_line('old salary is:'||:old.salary);
dbms_output.put_line('ole salary is:'||:new.salary);
dbms_output.put_line('old salary is:'||to_char(salary_balance));
end print_salary_change;

解决方案 »

  1.   

    有错误于 TRIGGER SCOTT.PRINT_SALARY_CHANGE:LINE/COL ERROR
    -------- ----------------------------------------------------------------------------------------------------------------------------------------------------
    4/16     PLS-00049: bad bind variable 'NEW.SALARY'
    4/28     PLS-00049: bad bind variable 'OLD.SALARY'
    4/15     PLS-00103: Encountered the symbol "=" when expecting one of the following:       := . ( @ % ;  The symbol ":= was inserted before "=" to continue.  
    5/40     PLS-00049: bad bind variable 'OLD.SALARY'
    6/40     PLS-00049: bad bind variable 'NEW.SALARY'SQL>
      

  2.   

    salary_balance=:new.salary=:old.salary;请问 这个触发器赋值应该怎么写,主要问题都在这条语句上~
      

  3.   


    create or replace trigger print_salary_change
    before delete or insert or update on emp
    for each row
    declare
    salary_balance number;
    begin
    salary_balance = ((:new.emp_salary) - (:old.emp_salary));
    dbms_output.put_line('old salary is:'||:old.emp_salary);
    dbms_output.put_line('new salary is:'||:new.emp_salary);
    dbms_output.put_line('the balance is:'||salary_balance);
    end print_salary_change;
      

  4.   

    PL/SQL赋值用:=
    salary_balance := ((:new.emp_salary) - (:old.emp_salary));
      

  5.   

    你在 insert的时候 就不会有:new
    在delete 的时候  就不会有 :old
    所以你这个触发器肯定会出问题的。
      

  6.   

    你应该  将触发器分开  不应该  insert, update ,delete 放在一起
      

  7.   

    楼上的说的对,部分事件不能用new和old;我原来以为只有在真正触发的时候才会有问题。我再去改改~
      

  8.   

    create or replace trigger print_salary_change
    before  update on emp--delete or insert or
    for each row
    declare
    salary_balance number;
    begin
    salary_balance := :new.emp_salary - :old.emp_salary;
    dbms_output.put_line('old salary is:'||:old.emp_salary);
    dbms_output.put_line('new salary is:'||:new.emp_salary);
    dbms_output.put_line('the balance is:'||salary_balance);
    end print_salary_change;
    ----------------------------------------------------------SQL> show errors trigger print_salary_change
    没有错误于 TRIGGER SCOTT.PRINT_SALARY_CHANGE