向表插入值时,同时更新其没赋值的字段

[复制链接]
查看11 | 回复8 | 2012-1-4 11:58:18 | 显示全部楼层 |阅读模式
本帖最后由 tongleye 于 2012-3-5 16:51 编辑
需求:
table B(ID NUMBER,b1 number,b2 number,b3 number)
table A(ID NUMBER,a1 number,a2 number,a3 number)
当向B表中插入记录的时候(只给ID,b1赋值),实现插入一条记录到A中,同时想给B的此条记录的b2,b3赋值(暂不管赋什么值,能赋值就行).
我想到的办法:
向B插入记录时,实现插入A,我用了触发器,但此触发器不能对B操作,所以不能实现后面的
后来又用到了JOB,定时自动更新B表的b2,b3字段,但我只要赋值一次就行了,这样浪费资源
请问有什么好的办法没?在我的基础上也好,新的办法也好,多谢了


回复

使用道具 举报

千问 | 2012-1-4 11:58:18 | 显示全部楼层
每次insert into b时调用下procedure怎么样:
create or replace procedure xxx (pi_id number, pi_d1 number) is
begin
insert into a(id, d1) values(pi_id, pi_d1);
update b
set b2 = xx
, b3 = xx
where id = pi_id and d1 = pi_d1;
commit;
end;
回复

使用道具 举报

千问 | 2012-1-4 11:58:18 | 显示全部楼层
向B插入数据时你就直接把b2,b3赋上值,用触发器向A表写数据时只insert id,b1这样不满足你的需求吗?
回复

使用道具 举报

千问 | 2012-1-4 11:58:18 | 显示全部楼层
dageji111 发表于 2012-3-5 16:54
每次insert into b时调用下procedure怎么样:
create or replace procedure xxx (pi_id number, pi_d1 num ...

想到了这个,那只能在触发器里调用procedure吧,不知道怎么调用,一调用就出错
回复

使用道具 举报

千问 | 2012-1-4 11:58:18 | 显示全部楼层
阿日 发表于 2012-3-5 18:02
向B插入数据时你就直接把b2,b3赋上值,用触发器向A表写数据时只insert id,b1这样不满足你的需求吗?

需求就是插入B表的时候,B2B3不赋值
回复

使用道具 举报

千问 | 2012-1-4 11:58:18 | 显示全部楼层
看不明白,到底是几个事务?数据之间有什么关系?
回复

使用道具 举报

千问 | 2012-1-4 11:58:18 | 显示全部楼层
这个需求比较晕


回复

使用道具 举报

千问 | 2012-1-4 11:58:18 | 显示全部楼层
此问题可有有两种处理方法:
1.就是楼上上的dageji111的处理,在同一个事物中处理。
2.就是在A表建触发器,触发器调一个更新B的过程。
建议1.
回复

使用道具 举报

千问 | 2012-1-4 11:58:18 | 显示全部楼层
解决了,其实触发器里直接就能更新本表,将AFTER改成BEFORE就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行