那怎么办,我希望当前insert不要执行,且update另一个表怎么做呢

解决方案 »

  1.   

    create or replace trigger LimitInEmptyBox
      instead of insert on A  
      for each row
    WHEN (....)
    declare
        ...
    begin
       ...
       update B set ...;                           --更新表B。这句没问题
    ...这里不用删除.
    end;
      

  2.   

    已连接到 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 SQL> create table TABLE_A_base(
      2  id       number,
      3  t        date,
      4  amount   number
      5  );表被创建SQL> CREATE VIEW TABLE_A AS
      2  SELECT * FROM TABLE_A_base;视图被创建SQL> CREATE OR REPLACE TRIGGER TABLE_A_insert
      2  INSTEAD OF INSERT ON TABLE_A
      3  BEGIN
      4  update mike_test0115 set id=11;
      5  END;
      6  /触发器被创建SQL> select * from mike_test0115;        ID NAME
    ---------- ----------------------------------------
             1 Mike
             2 Jimmy
            61 a%
             6 %
            61 %aa
             3 test6 行 已选择SQL> select * from TABLE_A_base;        ID T               AMOUNT
    ---------- ----------- ----------SQL> insert into TABLE_A values(1,sysdate,2);1 行 已插入SQL> commit;提交完成SQL> select * from TABLE_A_base;        ID T               AMOUNT
    ---------- ----------- ----------SQL> select * from mike_test0115;        ID NAME
    ---------- ----------------------------------------
            11 Mike
            11 Jimmy
            11 a%
            11 %
            11 %aa
            11 test6 行 已选择
      

  3.   

    cenlmmx(学海无涯苦作舟) 
    不行啊,我要操作的是表不是视图sbaz(万神渡劫)
    我想你一定没试过吧
      

  4.   

    其实我只是想要一个解决的方法不用触发器也可以。客户要求满足某个条件时取消用户的当前操作。
    由于用户的当前程序不是我们写的,只是知道这个程序所作的数据操作是update 表B 和 insert 表 A,但用户程序又没有把这两句加在一个事务中,所以不能用raise_application_error解决。不知各位高人有何高见。
      

  5.   

    遇到这种问题我一般都是建的view上的instead of触发器,控制比较方便.
      

  6.   

    cenlmmx(学海无涯苦作舟)
    可是用户当前程序不是我方写的没有原码,只能从数据操作中知道作了哪些数据操作,所以让用户程序改insert表为insert视图是不可能的。
    我现在想用两个触发器解决,在表A上加insert触发器,在表B上加Update触发器。
    在insert表A时update表B,update表B时delete表A。不知这样做会不会有什么问题。
      

  7.   

    我没试过,提供个想法,在update后调用一个存储过程删表这条记录不知道可行不?
      

  8.   

    想一下,发现还是用cenlmmx(学海无涯苦作舟)的方法较可行,用同名的视图代替原表,再用其它名字建原表。并在视图上建instead of insert/update/delete触发器可行。试试,可行就结贴
      

  9.   

    其实我想了下也没必要这样做的,楼主完全可以在程序里加以控制,满足条件则update表B,而不对表A进行插入,用程序代码来判断!
      

  10.   

    楼上没有看我的如复吧,用户当前程序不是我方写的,没有源码?但用户却要求我方实现当满足某个条件时用户程序的操作不起作用。如lee_billiy(思思)你有更的方法还请多多指教