暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle PLSQL -批量收集和更新(更好的方法)

askTom 2016-09-22
186

问题描述

嗨,汤姆,

我正在寻找一个更好的编码方法比我在我的当前系统中。在当前流程中,我有两个表,分别是1 600万条记录和8 100万条记录。我通常基于一个通用的所有者-帐户- id从一个阶段到一个产品插入。但是,由于某种原因,如果舞台上没有所有者帐户ID。我使用基于1)电子邮件地址(或) 2) FirstName和LastName和PhoneNo组合的匹配,将其与产品匹配,并更新我的阶段所有者_帐户_id. (因为它在过程中的其他地方使用)。

现在这个过程目前需要40分钟来完成,但有时由于一些未知的原因它需要近2小时完成。我正在努力优化这一进程,希望听到您的最佳做法。



--使用狗主人电子邮件、狗主人姓名和电话号码匹配查找现有狗主人

msg(0,'批量收集开始:'||TO_CHAR ( SYSD,'DD-MON-YYYY HH:MI:SS AM') ;

SELECT nvl ( OWER_AC_ID,'0') ||'$'||nvl(Email_AddR,'') ||'$'||nvl( OWER_第一_NM ,'') ||'$'||nvl ( OWER_L_NM,'') ||'$'||nvl (电话_1_NBR,'')
批量收集到OTAB
来自狗所有者A
存在的位置(选择“Y”
来自登台DOG_所有者B
其中B.PROCESS_CD ='N'
还有
((A.Email_AddR = B.Email_AddR
还有
INSTR(A.Email_AddR,'@') > 1
)

(B.OWER_I_NM = A.OWER_I_NM
还有
B.OWER_L_NM = A.OWER_L_NM
还有
B.电话_1_NBR = A.电话_1_NBR
)
)
);

如果Otab.计数<> 0
那么

我在奥塔布。首先。。。最后
更新暂存.DOG_OWER A
设置A.OWER_ACCT_ID =子STR(OTAB(i), 1,INSTR(OTAB(i), '$', 1, 1)-1)
在哪里
( (A.Email_AddR =SSTR(OTAB(i),INSTR(OTAB(i), '$', 1, 1)+1, (INSSTR(OTAB(i), '$', 1, 2)) - (INSTR(OTAB(i), '$', 1, 1)+1))))
还有
INSTR(A.Email_AddR,'@') > 1
)

(A.OWER_I_NM=SSTR(OTAB(i),INSTR(OTAB(i), '$', 1,2)+1 , (INST(OTAB(i), '$', 1,3)) - (INST(OTAB(i), '$', 1, 2)+1))
还有
A.OWER_L_NM=SSTR(OTAB(i),INSTR(OTAB(i), '$', 1,3)+1, (INSSTR(OTAB(i), '$', 1,4)) - (INSSTR(OTAB(i), '$', 1,3)+1)))
还有
A.电话_1_NBR =子STR(OTAB(i),INSTR(OTAB(i), '$', 1, 4)+1)
)
)
和A.Owner_AC帐户_ID <>子STR(OTAB(i), 1,INSTR(OTAB(i), '$', 1, 1)-1)
和A.PROCESS_CD ='N'
返回(TO_CHAR(A.OWER_AC)_ID)||'$'||SUBSTR(OTAB(i), 1,INSTR(OTAB(i), '$', 1, 1)-1)) BULK收集到ENROLTAB ;


结束弧线;

专家解答

该过程似乎是:

将行选择到集合中,其中【复杂条件】
使用集合和【复杂条件】更新表

我很好奇为什么不能只使用一个合并语句,而不必“移动”所有这些行,即

合并到STAING.DOG_OWER中
使用
(【您的大选择声明】)

( [join c在diti在s ]





「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论