想实现如下的功能:(oracle 10g XE 运行在ubuntu系统中)
当从ZWXW表中删除一条数据后,自动插入ZWXW_BACKUP表中
触发器定义如下:
  create  or replace trigger trig_zwxw_delete
   before delete  on zwxw
begin
insert into zwxw_backup select * from zwxw
end;创建时提示:ora-24344 success with compilation error当删除数据时,提示:ORA-04098: trigger 'TRIG_ZWXW_DELETE' is invalid and failed re-validation
(使用WEB方式以界面方式操作也是出错)信息如下:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: begin case declare end exception exit for goto if loop mod null pragma raise return select update while with

解决方案 »

  1.   

    create  or replace trigger trig_zwxw_delete
       before delete  on zwxw
    begin
    insert into zwxw_backup(字段1,字段2...) vaules(:old.字段1,:old.字段2...);
    end;
      

  2.   

    不是(begin....end )的问题,中间不管放什么语句都是上面的错,而且单独执行中间的语句是正确的
      

  3.   

    不是权限问题,我赋予了DBA的权限
      

  4.   

    试试在insert into zwxw_backup select * from zwxw 后加个";"
    create  or replace trigger trig_zwxw_delete
    before delete  on zwxw
    begin
    insert into zwxw_backup select * from zwxw;
    end;
      

  5.   

    before delete  on zwxw  这里应该也要加';'吧
      

  6.   

    create  or replace trigger trig_zwxw_delete
       before delete  on zwxw
    begin
    insert into zwxw_backup select * from zwxw;最后少了;号。这和sql server 不一样的
    end;
      

  7.   

    建议楼主不要偷懒了,把字段写全
    insert into zwxw_backup select * from zwxw
    改为:
    insert into zwxw_backup(字段...) select 字段... from zwxw
      

  8.   

    create or replace trigger del_test
      before delete on ds_emp  
      for each row
    declare
      -- local variables here
    begin
      insert into trg_del
      values
        (:old.empno,
         :old.ename,
         :old.job,
         :old.mgr,
         :old.hiredate,
         :old.sal,
         :old.comm,
         :old.deptno);
    end del_test;触发器好像不能对表进行insert into table select操作
      

  9.   

    'zwxw_backup'这个表的结构和 zwxw相同,可以这么写
    create  or replace trigger trig_zw_delete
       before delete 
       on zwbegin
    insert into zw_up  select * from zw;
    end;
      

  10.   

    触发器,只能对当前数据进行操作,只能使用:OLD.
      

  11.   

    我觉得是这么回事,触发器要用行级别的(for each row )但是触发器的触发表和他的查询表是同一个,即在变异表上不能进行查询和修改操作,用两个触发器就行了吧!第一个用来记录删除的直(for each row) 第二个用来插入,。我不知道说的对不对!我也是新手随便写的,我觉得要是一次删除很多行还要用上循环,不好意思献丑了
    create  or replace trigger read_trig_zwxw_delete
       before delete  on zwxw
       for each row 
    declare
    v_1 zwxw.……;
    v_2
    .
    .
    begin
    v_1:=:old.……;
    v_2
    .
    .
    end read_trig_zwxw_delete;create  or replace trigger trig_zwxw_delete
      after delect on zwxw
    begin 
      insert into zwxw_backup values(v_1,v_2……);
    end;