📄 第五章 pl-sql集合与记录(2) - pl-sql用户指南与参考 - whatiswhat.htm
字号:
<!-- 0 --></LI>
<LI class=ul0><A class=list1
href="http://blog.chinaunix.net/u1/44734/article.html">文章</A>
<UL class=ul1>
<LI><A href="http://blog.chinaunix.net/u1/44734/article_78214.html">·
数据库 <FONT face="Wingdings 3">}</FONT></A>
<UL class=ul2>
<LI><A
href="http://blog.chinaunix.net/u1/44734/article_82530.html">·
PL/SQL用户指南与参考<!-- a82530 --></A><!-- 82530 --> </LI></UL>
<LI><A href="http://blog.chinaunix.net/u1/44734/article_62688.html">·
FreeBSD<!-- a62688 --></A><!-- 62688 -->
<LI><A href="http://blog.chinaunix.net/u1/44734/article_62693.html">·
文摘<!-- a62693 --></A><!-- 62693 -->
<LI><A href="http://blog.chinaunix.net/u1/44734/article_82547.html">·
JavaScript<!-- a82547 --></A><!-- 82547 -->
<LI><A href="http://blog.chinaunix.net/u1/44734/article_83441.html">·
Linux <FONT face="Wingdings 3">}</FONT></A>
<UL class=ul2>
<LI><A
href="http://blog.chinaunix.net/u1/44734/article_83906.html">· VIM<!-- a83906 --></A><!-- 83906 --> </LI></UL>
<LI><A href="http://blog.chinaunix.net/u1/44734/article_62689.html">·
杂谈<!-- a62689 --></A><!-- 62689 -->
<LI><A href="http://blog.chinaunix.net/u1/44734/article_89165.html">·
Windows<!-- a89165 --></A><!-- 89165 --> </LI></UL></LI>
<LI class=ul0><A class=list1
href="http://blog.chinaunix.net/u1/44734/index.html">首页</A> </LI></UL></TD>
<TD width=10></TD></TR>
<TR>
<TD colSpan=4>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width=980 border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<SCRIPT language=javascript>function $(s){return document.getElementById(s);}function ShowHideDiv(divid,iImg){if($(divid).style.display == "none"){iImg.src="../../templates/newgreen/images/dot2.gif";$(divid).style.display = "block";iImg.title="收起";}else{iImg.src="../../templates/newgreen/images/dot4.gif";$(divid).style.display = "none";iImg.title="展开";}}navHover();</SCRIPT>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD height=3></TD></TR></TBODY></TABLE><BR>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width="90%" align=center border=0>
<TBODY>
<TR>
<TD width=18 height=28><IMG alt=""
src="第五章 PL-SQL集合与记录(2) - PL-SQL用户指南与参考 - whatiswhat.files/bg_art_left_top.gif"
border=0></TD>
<TD
background="第五章 PL-SQL集合与记录(2) - PL-SQL用户指南与参考 - whatiswhat.files/bg_art_top.gif">
<P style="MARGIN: 5px; LINE-HEIGHT: 150%"></P></TD>
<TD width=18 height=28><IMG alt=""
src="第五章 PL-SQL集合与记录(2) - PL-SQL用户指南与参考 - whatiswhat.files/bg_art_right_top.gif"
border=0></TD></TR>
<TR>
<TD width=18
background="第五章 PL-SQL集合与记录(2) - PL-SQL用户指南与参考 - whatiswhat.files/bg_art_left.gif"></TD>
<TD align=middle bgColor=#f5fdee><BR><FONT style="FONT-SIZE: 14pt"
color=#295200><B>第五章 PL/SQL集合与记录(2)</B></FONT>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#a5bd6b cellSpacing=1
cellPadding=0 width="100%" border=1>
<TBODY>
<TR>
<TD align=middle>
<TABLE style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle>
<TABLE
style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DIV id=art style="MARGIN: 15px">
<P class=title1>十二、使用集合批量绑定减少循环开销</P>
<P>如下图所示,PL/SQL引擎会执行过程化语句,但它把SQL语句发送给SQL引擎处理,然后SQL引擎把处理的结果返回给PL/SQL引擎。</P><IMG
alt=""
src="第五章 PL-SQL集合与记录(2) - PL-SQL用户指南与参考 - whatiswhat.files/o_5-3.gif">
<P>PL/SQL和SQL引擎间的频繁切换会大大降低效率。典型的情况就是在一个循环中反复执行SQL语句。例如,下面的DELETE语句就会在FOR循环中被多次发送到SQL引擎中去:</P>
<BLOCKQUOTE>
<TABLE>
<TBODY>
<TR>
<TD
noWrap><STRONG>DECLARE</STRONG><BR> <STRONG>TYPE</STRONG> numlist <STRONG>IS</STRONG> VARRAY(20) <STRONG>OF</STRONG> <STRONG>NUMBER</STRONG>;<BR><BR> depts numlist := numlist(10, 30, 70); <EM>-- department numbers</EM><BR><STRONG>BEGIN</STRONG><BR> ...<BR> <STRONG>FOR</STRONG> i <STRONG>IN</STRONG> depts.FIRST .. depts.LAST <STRONG>LOOP</STRONG><BR> <STRONG>DELETE</STRONG> <STRONG>FROM</STRONG> emp<BR> <STRONG>WHERE</STRONG> deptno = depts(i);<BR> <STRONG>END</STRONG> <STRONG>LOOP</STRONG>;<BR><STRONG>END</STRONG>;
</TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P> </P>这种情况下,如果SQL语句影响了四行或更多行时,使用批量绑定就会显著地提高性能。
<P> </P>
<P class=title2>1、批量绑定如何提高性能</P>
<P>用SQL语句中为PL/SQL变量赋值称为绑定,PL/SQL绑定操作可以分为三种: </P>
<OL>
<LI>内绑定(in-bind):用INSERT或UPDATE语句将PL/SQL变量或主变量保存到数据库。
<LI>外绑定(out-bind):通过INSERT、UPDATE或DELETE语句的RETURNING子句的返回值为PL/SQL变量或主变量赋值。
<LI>定义(define):使用SELECT或FETCH语句为PL/SQL变量或主变量赋值。
</LI></OL>
<P>DML语句可以一次性传递集合中所有的元素,这个过程就是批量绑定。如果集合有20个元素,批量绑定的一次操作就相当于执行20次SELECT、
INSERT、UPDATE或DELETE语句。这项技术是靠减少PL/SQL和SQL引擎间的切换次数来提高性能的。要对INSERT、UPDATE和
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -