FORM 更新多表视图

如果是数据源是一张多表视图,但只更新数据到一张表,这种情况比较好处理。

先将数据块的Query 表与DML 目标表分别设置,


然后将非DML 表的字段设置Query only 设置“是”。

如果数据源是一张多表视图,并且要将数据更新到多张表中。要实现此功能方法很多。
方法一:可以手工在form 中编写insert、update、delete、lock 触发器。此方法代码量较大。
方法二:使用基于视图的instead of 触发器。本文采用此方法。
1.创建两张表
CREATE TABLE T1(T_ID INT,T1_NAME VARCHAR2(30));
CREATE TABLE T2(T_ID INT,T2_ADDRESS VARCHAR2(50));
2.创建一张含有多张表的视图
create or replace view T1_T2_V as
SELECT T1.T_ID,T1.T1_NAME,T2.T2_ADDRESS FROM
T1,T2 WHERE T1.T_ID=T2.T_ID;
3. 创建一个Instead of 视图触发器
create or replace trigger tr_t1
instead of insert or update or delete on T1_T2_V
for each row
begin
declare
begin
if inserting then
insert into T1 values(:new.T_ID,:new.T1_NAME);
insert into T2 values(:new.T_ID,:new.T2_ADDRESS);
elsif updating then
update T1 set T_ID=:new.T_ID,T1_NAME=:new.T1_NAME
where T_ID=:old.T_ID;
update T2 set T_ID=:new.T_ID,T2_ADDRESS=:new.T2_ADDRESS
where T_ID=:old.T_ID;
else
delete from T1 where T_ID=:old.T_ID;
delete from T2 where T_ID=:old.T_ID;
end if;
end;
end tr_t1;
4.按标准的FORM 开发步骤,修改template。
将数据块的查询源调成前面开发的VIEW,DML 目标表留空。


编译及注册到EBS 环境中。发现insert 可以成功,但update、delete 出错。


解决:将该数据块的键模式设成“可更新”



OK,这样就完成Form 的多表视图更新啦。总结一下,就四大点:
1 设置数据块属性为“允许使用主键”;
2 设置一到多个主键项目;
3 将数据块的“键模式”属性设置为可更新。
4 编写一个instead of 触发器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值