存储过程的问题,请高手帮下忙,先谢过了

usernamezero 2009-02-16 04:01:11
描述两个表(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;
...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjcxyk 2009-02-16
  • 打赏
  • 举报
回复
当一个事务结束后commit, 一般要到最后commit,而且要有异常处理,当发生异常时要回滚数据,一个事务里不要有多个commit
DragonBill 2009-02-16
  • 打赏
  • 举报
回复
if select aac001,sb_psn_id from sb_psn s,mdm_psn m where s.aac001=m.sb_psn_id then
不正确, LS已有解释

建议用MERGE
yanzhuai007 2009-02-16
  • 打赏
  • 举报
回复
begin
select count(1) into temp from table where ;
if temp>=1 then
update......;
else
insert .....;
end if;
end;
yf520gn 2009-02-16
  • 打赏
  • 举报
回复
1 用MERGE就可以实现你的需求,没必要像你写那么复杂
2.存储过程中的SELECT 必跟INTO

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧