比如开始创建一个emp表的触发器: 
create trigger t1 
  after delete on emp 
begin 
  dbms_output.put_line('ok!'); 
end; 当我修改时,想把触发器从emp表改到dept表,其它项不变: create or replace trigger t1 
  after delete on dept 
begin 
  dbms_output.put_line('ok!'); 
end; 系统会报错“触发器 't1' 已经在另一表上存在, 无法替换” 
这是为什么呢?为什么不能重新指定表呢?

解决方案 »

  1.   


    --改一下:create or replace trigger t2 
      after delete on dept 
    begin 
      dbms_output.put_line('ok!'); 
    end; 
      

  2.   

    加replace的意思不就是修改内容么?!
    比如一个存储过程,你修改它内容的时候就用or replace,表示修改,可以修改过程中的所有内容。要是再创建一个,当然就不用replace了。
    我现在这个问题也是一样的啊,我就是要修改一个触发器,我当然知道换个名字全ok,我就是要修改这个触发器,让他关联别的表,我的问题就是,为什么不能让一个触发器换一个关联的表?
      

  3.   

    LZ,问题很简单啊,你可以先删掉你之前那个啊,然后再改内容啊!存储过程和方法都是一样的道理,已经有的tirgger,当然不能再重名创建
      

  4.   

    or replace是限于对同一张表修改不同操作。现在把create or replace用在另一张表上,等于是个新触发器,而不是修改原触发器。但是该触发器名已使用,所以报错。