由于oracle不能对正在被触发的table进行操作(ora-04091),所以这里先对table建一个view: --create view create view vtest as select * from t_post; --然后在view上建触发器,以后每次就通过修改view来修改原表 create or replace trigger aftUpdBestAnswer_t INSTEAD OF INSERT OR UPDATE ON v_t_test FOR EACH ROW declare begin if :new.ifBest = 'true' then update t_post set ifEnd = '截题', endTime = sysdate; end if; end aftUpdBestAnswer_t; 还有一种方法是建立一个临时table,在原table上建立一个trigger来修改临时表,临时表上也建立一个trigger,当临时表被修改时触发trigger来修改原表。 其他两个题你可以自己考虑一下
由于oracle不能对正在被触发的table进行操作(ora-04091),所以这里先对table建一个view: --create view create view vtest as select * from t_post; --然后在view上建触发器,以后每次就通过修改view来修改原表 create or replace trigger aftUpdBestAnswer_t INSTEAD OF INSERT OR UPDATE ON v_t_test FOR EACH ROW declare begin if :new.ifBest = 'true' then update t_post set ifEnd = '截题', endTime = sysdate; end if; end aftUpdBestAnswer_t; 还有一种方法是建立一个临时table,在原table上建立一个trigger来修改临时表,临时表上也建立一个trigger,当临时表被修改时触发trigger来修改原表。 其他两个题你可以自己考虑一下 我想问下,第二题 牵扯到三个表,但 触发器只能多一个表操作,怎么办?
由于oracle不能对正在被触发的table进行操作(ora-04091),所以这里先对table建一个view: --create view create view vtest as select * from t_post; --然后在view上建触发器,以后每次就通过修改view来修改原表 create or replace trigger aftUpdBestAnswer_t INSTEAD OF INSERT OR UPDATE ON v_t_test FOR EACH ROW declare begin if :new.ifBest = 'true' then update t_post set ifEnd = '截题', endTime = sysdate; end if; end aftUpdBestAnswer_t; 还有一种方法是建立一个临时table,在原table上建立一个trigger来修改临时表,临时表上也建立一个trigger,当临时表被修改时触发trigger来修改原表。 其他两个题你可以自己考虑一下 我想问下,第二题 牵扯到三个表,但 触发器只能多一个表操作,怎么办? 可以对一个表操作,如下:create table t1 (a number);create table t2 (a number);create table t3 (a number);create table t4 (a number);create or replace trigger tri_t1 before insert on t1 for each row declare -- local variables here begin insert into t2 values (:new.a); insert into t3 values (:new.a); insert into t4 values (:new.a); end tri_t1;insert into t1 values(1);
由于oracle不能对正在被触发的table进行操作(ora-04091),所以这里先对table建一个view:
--create view
create view vtest as select * from t_post;
--然后在view上建触发器,以后每次就通过修改view来修改原表
create or replace trigger aftUpdBestAnswer_t
INSTEAD OF INSERT OR UPDATE ON v_t_test
FOR EACH ROW
declare
begin
if :new.ifBest = 'true' then
update t_post set ifEnd = '截题', endTime = sysdate;
end if;
end aftUpdBestAnswer_t;
还有一种方法是建立一个临时table,在原table上建立一个trigger来修改临时表,临时表上也建立一个trigger,当临时表被修改时触发trigger来修改原表。
其他两个题你可以自己考虑一下
由于oracle不能对正在被触发的table进行操作(ora-04091),所以这里先对table建一个view:
--create view
create view vtest as select * from t_post;
--然后在view上建触发器,以后每次就通过修改view来修改原表
create or replace trigger aftUpdBestAnswer_t
INSTEAD OF INSERT OR UPDATE ON v_t_test
FOR EACH ROW
declare
begin
if :new.ifBest = 'true' then
update t_post set ifEnd = '截题', endTime = sysdate;
end if;
end aftUpdBestAnswer_t;
还有一种方法是建立一个临时table,在原table上建立一个trigger来修改临时表,临时表上也建立一个trigger,当临时表被修改时触发trigger来修改原表。
其他两个题你可以自己考虑一下
我想问下,第二题 牵扯到三个表,但 触发器只能多一个表操作,怎么办?
由于oracle不能对正在被触发的table进行操作(ora-04091),所以这里先对table建一个view:
--create view
create view vtest as select * from t_post;
--然后在view上建触发器,以后每次就通过修改view来修改原表
create or replace trigger aftUpdBestAnswer_t
INSTEAD OF INSERT OR UPDATE ON v_t_test
FOR EACH ROW
declare
begin
if :new.ifBest = 'true' then
update t_post set ifEnd = '截题', endTime = sysdate;
end if;
end aftUpdBestAnswer_t;
还有一种方法是建立一个临时table,在原table上建立一个trigger来修改临时表,临时表上也建立一个trigger,当临时表被修改时触发trigger来修改原表。
其他两个题你可以自己考虑一下
我想问下,第二题 牵扯到三个表,但 触发器只能多一个表操作,怎么办?
可以对一个表操作,如下:create table t1 (a number);create table t2 (a number);create table t3 (a number);create table t4 (a number);create or replace trigger tri_t1
before insert on t1
for each row
declare
-- local variables here
begin
insert into t2 values (:new.a);
insert into t3 values (:new.a);
insert into t4 values (:new.a);
end tri_t1;insert into t1 values(1);