两个数据库里的两个表,字段都是一样的。
T1
A
B T2
A
B
A是主键。视图 V1里,如果是 T1表的数据,A字段就是 'T1XX' ,如果是 T2表的数据,A字段就是 'T2XX'
更新视图:
update V1 set B='12' where A='T1XX' 报“此视图的数据操纵操作非法”。
请教各位老大,怎么更新?
刚才查了下,触发器可以,怎么建这个触发器,还得拆分下 A字段 ? 请教。。
T1
A
B T2
A
B
A是主键。视图 V1里,如果是 T1表的数据,A字段就是 'T1XX' ,如果是 T2表的数据,A字段就是 'T2XX'
更新视图:
update V1 set B='12' where A='T1XX' 报“此视图的数据操纵操作非法”。
请教各位老大,怎么更新?
刚才查了下,触发器可以,怎么建这个触发器,还得拆分下 A字段 ? 请教。。
create table t1 (a char(4) primary key, b number(4))
/
create table t2 (a char(4) primary key, b number(4))
/insert into t1 values('t100',10);
insert into t2 values('t200',20);
insert into t1 values('t101',20);
insert into t2 values('t201',30);
commit;create view t_v as
select * from (
select a,b from t1
union all
select a,b from t2
)
/create or replace trigger update_tv_trg
instead of update on t_v
begin
-- 阻止更改 a 列的 "t1" 或 "t2" 部分
if substr(:old.a,1,2)<>substr(:new.a,1,2) then
raise_application_error(-20001,'Deny update.');
end if; if substr(:old.a,1,2)='t1' then
update t1 set a=:new.a,b=:new.b where a=:old.a;
elsif substr(:old.a,1,2)='t2' then
update t2 set a=:new.a,b=:new.b where a=:old.a;
end if;
end;
/-- 测试
update t_v set b=30 where a='t100';update t_v set b=b-10 where a like 't2%';
instead of update on 视图名
for each row
begin
update V1 set B='12' where A='T1XX';
end;
/