本人刚刚接触Oracle,想向各位熟悉Oracle的大神请教一下,oracle sql developer是否无法使用行级触发器的new和old变量??我定义的触发器能够在sqlplus中编译并且起作用,但是放到 sql developer上执行的时候总是弹出输入绑定的对话框。
百度两个小时都没有找到确定的答案。是sql developer设置问题?还是sql developer 根本不支持这种触发器的new和old变量?
希望各位指点一下,谢谢。
create or replace  trigger tri_emp 
before update
on employees
for each row
begin
if :new.salary>:old.salary then
dbms_output.put_line(:new.first_name||'工资调高了');
elsif :new.salary<:old.salary then 
dbms_output.put_line(:new.first_name||'工资调低了');
else
dbms_output.put_line(:new.first_name||'工资没有调整');
end if;
end tri_emp;

解决方案 »

  1.   

    触发器一般不用来做这种用途。
    sql developer好像很少有人用,建议你装个pl/sql
      

  2.   


    我安装plsql试了一下,确实不会报错,谢谢。不过不知道这种触发器用sql developer怎么实现。
      

  3.   


    我安装plsql试了一下,确实不会报错,谢谢。不过不知道这种触发器用sql developer怎么实现。
    我也在用sql developer,没遇到过这种问题,也用你的脚本做了个测试,也正确执行了。
      

  4.   


    SQL> 
    SQL> create table employees(salary int, first_name varchar(10));
    Table created
    SQL> insert into employees values(100,'zhangsan');
    1 row inserted
    SQL> create or replace  trigger tri_emp
      2  before update
      3  on employees
      4  for each row
      5  begin
      6  if :new.salary>:old.salary then
      7  dbms_output.put_line(:new.first_name||'工资调高了');
      8  elsif :new.salary<:old.salary then
      9  dbms_output.put_line(:new.first_name||'工资调低了');
     10  else
     11  dbms_output.put_line(:new.first_name||'工资没有调整');
     12  end if;
     13  end tri_emp;
     14  /
    Trigger created
    SQL> set serverout on;
    SQL> update employees set salary = 200;
    zhangsan工资调高了
    1 row updated
    SQL> update employees set salary = 100;
    zhangsan工资调低了
    1 row updated
    SQL> update employees set salary = 100;
    zhangsan工资没有调整
    1 row updated
    SQL> drop table employees purge;
    Table droppedSQL>