create or replace trigger LimitInEmptyBox instead of insert on A for each row WHEN (....) declare ... begin ... update B set ...; --更新表B。这句没问题 ...这里不用删除. end;
已连接到 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 行 已选择
instead of insert on A
for each row
WHEN (....)
declare
...
begin
...
update B set ...; --更新表B。这句没问题
...这里不用删除.
end;
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 行 已选择
不行啊,我要操作的是表不是视图sbaz(万神渡劫)
我想你一定没试过吧
由于用户的当前程序不是我们写的,只是知道这个程序所作的数据操作是update 表B 和 insert 表 A,但用户程序又没有把这两句加在一个事务中,所以不能用raise_application_error解决。不知各位高人有何高见。
可是用户当前程序不是我方写的没有原码,只能从数据操作中知道作了哪些数据操作,所以让用户程序改insert表为insert视图是不可能的。
我现在想用两个触发器解决,在表A上加insert触发器,在表B上加Update触发器。
在insert表A时update表B,update表B时delete表A。不知这样做会不会有什么问题。