游标循环 查询和更新是很慢的一件事情

<p>最近赶个项目,里面要统计末末的属性</p>

<p><!-- [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:ËÎÌå;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:"Times New Roman";
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-format:other;
mso-font-pitch:auto;
mso-font-signature:3 0 0 0 1 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
<!-- [if gte mso 10]>
<mce:style><!--
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
-->
<!-- [endif]---->
</p>
<p class="MsoNormal"><span style="" lang="EN-US"><span> </span>
</span>
<span style="" lang="EN-US">for</span>
<span style="" lang="EN-US"> LASTLOGIN_cur </span>
<span style="" lang="EN-US">in</span>
<span style="" lang="EN-US"> ( </span>
<span style="" lang="EN-US">select</span>
<span style="" lang="EN-US"> username,last_landtime </span>
<span style="" lang="EN-US">from</span>
<span style="" lang="EN-US"> a </span>
<span style="" lang="EN-US">where</span>
<span style="" lang="EN-US"> landtime > trunc(</span>
<span style="" lang="EN-US">sysdate</span>
<span style="" lang="EN-US">) -</span>
<span style="" lang="EN-US">7</span>
<span style="" lang="EN-US">) <br><span> </span>
</span>
<span style="" lang="EN-US">loop</span>
<span style="" lang="EN-US"><span>
</span>
<br><span> </span>
</span>
<span style="" lang="EN-US">update</span>
<span style="" lang="EN-US"> a<span> </span>
<span></span>
<br><span> </span>
</span>
<span style="" lang="EN-US">set</span>
<span style="" lang="EN-US">
(last_landtime,last_account,update_time)=<br><span> </span>
(<br><span> </span>
</span>
<span style="" lang="EN-US">select</span>
<span style="" lang="EN-US"><span> </span>
LASTTIME,USERMONEY,</span>
<span style="" lang="EN-US">sysdate</span>
<span style="" lang="EN-US"><br><span> </span>
</span>
<span style="" lang="EN-US">from</span>
<span style="" lang="EN-US"><span> b</span>
<br><span> </span>
</span>
<span style="" lang="EN-US">where</span>
<span style="" lang="EN-US">
f_username = LASTLOGIN_cur.f_username<span>
</span>
<br><span> </span>
</span>
<span style="" lang="EN-US">and</span>
<span style="" lang="EN-US"><span> </span>
LASTTIME > ASTLOGIN_cur.f_last_landtime <br><span> </span>
) </span>
<span style="" lang="EN-US">where</span>
<span style="" lang="EN-US">
a.f_username = LASTLOGIN_cur.f_username ;</span>
</p>
<p class="MsoNormal"></p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><span style="" lang="EN-US">for cur in(....)</span>
</p>
<p class="MsoNormal"><span style="" lang="EN-US"><span>loop</span>
</span>
</p>
<p class="MsoNormal"><span style="" lang="EN-US"><span>for cur in(....)</span>
</span>
</p>
<p class="MsoNormal"><span style="" lang="EN-US"><span> </span>
</span>
</p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><span style="" lang="EN-US"><span>像上面第一条 把所有的查询写到IN里面去 获得运算后的结果,然后循环更新。</span>
</span>
</p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><span style="" lang="EN-US"><span>下面语句 也是把所有的 写到IN 中 采用LEFT JOIN 来 排除不存在的数据 再来运算</span>
</span>
</p>
<p class="MsoNormal"></p>
<p class="MsoNormal"></p>
<p>
for n_fill_curA in <br>
(<br>
select p. username,p. optime<br>
from<br>
(<br>
select *<br>
from <br>
(<br>
select username, optime,ROW_NUMBER() OVER (PARTITION BY username ORDER BY optime asc) rowrid<br>
from user_pay_his <br>
where busisort = 20 and optime > trunc(sysdate)-7<br>
) where rowrid =1<br>
)p inner join <br>
(<br>
select username <br>
from user_attr <br>
where filltime is null<br>
)b on p. username=b. username <br>
)<br>
loop<br>
update t_behavior_attribute a --用户首次充值时间<br>
set filltime = n_fill_curA. optime,<br>
update_time = sysdate<br>
where a. username = n_fill_curA. username <br>
and a. filltime is null;<br><br>
v_count :=v_count+1;<br>
v_rownum :=v_rownum+sql%rowcount;<br>
if mod(v_count,100)=0 then <br>
v_count:=0;<br>
commit;<br>
end if; <br>
end loop;<br>
commit;</p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值