日期:2014-05-17  浏览次数:21177 次

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的末六位)