描述两个表(sb_psn,mdm_psn)更新数据,条件列sb_psn.aac001,mdm_psn.sb_psn_id
存储过程首先查询mdm_psn表上sb_psn_id列中如果存在跟aac001列内容相同的记录就更新mdm_psn的信息,如果不存在就insert 
存储过程如下所示,哥哥们看看有什么不对,指正一下,先谢谢过了。
create or replace procedure pr_sb_middle_mdm is
   begin
      if select aac001,sb_psn_id from sb_psn s,mdm_psn m where s.aac001=m.sb_psn_id then
         update mdm_psn  set(SB01,SB02,SB04,SB05,SB06,SB08,SB10,
                            SB11,SB12,SB13,SB14,SB15,SB16,SB17,SB18,SB19,SB20,
                            SB21,SB22,SB23,SB24,SB25,SB26,SB27,SB28)=
                        (select aac001,aac003,aac004,aac006,aac002,aab001,aac008,aac017,aac005,
                               aac009,aac023,cac008,aac018,aac019,aac011,aac007,cac009,aac020,
                               aab001,akc020,aae007,aae005,aac016,aac014,aac015 from sb_psn sb ,mdm_psn mp
                               where sb.aac001= mp.sb_psn_id and mp.sb_psn_id is not null);
                                commit;
       else
           insert into mdm_psn (SB01,SB02,SB04,SB05,SB06,SB08,SB10,
                            SB11,SB12,SB13,SB14,SB15,SB16,SB17,SB18,SB19,SB20,
                            SB21,SB22,SB23,SB24,SB25,SB26,SB27,SB28)
                        (select aac001,aac003,aac004,aac006,aac002,aab001,aac008,aac017,aac005,
                               aac009,aac023,cac008,aac018,aac019,aac011,aac007,cac009,aac020,
                               aab001,akc020,aae007,aae005,aac016,aac014,aac015 from sb_psn);
                                commit;
    end if;
end pr_sb_middle_mdm;

解决方案 »

  1.   

    1 用MERGE就可以实现你的需求,没必要像你写那么复杂
    2.存储过程中的SELECT 必跟INTO
      

  2.   

    begin 
       select count(1) into temp from table  where ;
         if temp>=1 then
             update......;
         else 
             insert .....;
        end if;
    end;
      

  3.   

    if select aac001,sb_psn_id from sb_psn s,mdm_psn m where s.aac001=m.sb_psn_id then 
    不正确, LS已有解释建议用MERGE
      

  4.   

    当一个事务结束后commit, 一般要到最后commit,而且要有异常处理,当发生异常时要回滚数据,一个事务里不要有多个commit