merge into 的事务处理问题
merge into lq_matchwoman t1
using (select y1.woman,
y2.operatedate,
y2.org,
l.orgname,
l.lqorg,
y2.name,
(select
lpad((to_number(nvl(max(substr(t.lqwbarcode, 15, 6)), 0)) + 1),
6,
'0') lqwbarcode
from lq_matchwoman t
where substr(t.lqwbarcode, 1, 9) ||
substr(t.lqwbarcode, 11, 2) = l.lqorg) as maxb
from y_woman y1, y_woman y2, lq_matchorg l
where y1.woman = y2.woman
and y2.org = l.hyorg
and y2.operatedate >
to_date('2011-02-10 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and y2.OPERATEDATE <
to_date('2011-02-14 23:59:59', 'yyyy-mm-dd hh24:mi:ss')) t2
on (t1.woman = t2.woman)
when not matched then
insert
values
(t2.woman,
(substr(t2.LQORG, 1, 9) || '1' || substr(t2.LQORG, 10, 2) ||
substr(to_char(t2.operatedate, 'yyyy-mm-dd'), 3, 2))
|| t2.maxb,
t2.name)
我这个主要实现的就是 往 lq_matchwoman中插入特定编码的表,其中这个特定编码,就是靠 lq_matchorg中的机构码加上lq_matchwoman中末六位的最大顺序码。
也就是 lpad((to_number(nvl(max(substr(t.lqwbarcode, 15, 6)), 0)) + 1),
6,
'0')
总的插入到lq_matchwoman中的就是 机构前缀码 + 顺序码:
机构前缀码:(substr(t2.LQORG, 1, 9) || '1' || substr(t2.LQORG, 10, 2) ||
substr(to_char(t2.operatedate, 'yyyy-mm-dd'), 3, 2))
顺序码: t2.maxb,
现在的问题就是这个 顺序码,没有往上递增。。。
这不是应该有事务效果吗,我在插入当前,之前的一条不是应该已经插入了吗,当前的MAX取到效果的不是应该是前面记录已效果吗。。不解
有没有高人,解下惑,有更好的办法,让我实现这个动态递增插入。
[解决办法]
建sequence,代替max(lq_matchwoman的末六位)