?? 第十一章 本地動態sql - pl-sql用戶指南與參考 - whatiswhat.htm
字號:
數據庫 <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="第十一章 本地動態SQL - PL-SQL用戶指南與參考 - whatiswhat.files/bg_art_left_top.gif"
border=0></TD>
<TD
background="第十一章 本地動態SQL - 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="第十一章 本地動態SQL - PL-SQL用戶指南與參考 - whatiswhat.files/bg_art_right_top.gif"
border=0></TD></TR>
<TR>
<TD width=18
background="第十一章 本地動態SQL - PL-SQL用戶指南與參考 - whatiswhat.files/bg_art_left.gif"></TD>
<TD align=middle bgColor=#f5fdee><BR><FONT style="FONT-SIZE: 14pt"
color=#295200><B>第十一章 本地動態SQL</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">
<CENTER><IMG alt=""
src="第十一章 本地動態SQL - PL-SQL用戶指南與參考 - whatiswhat.files/o_cover.jpg"><BR><IMG
alt=""
src="第十一章 本地動態SQL - PL-SQL用戶指南與參考 - whatiswhat.files/o_banner.gif">
</CENTER>
<DIV id=chapter>第十一章 本地動態SQL</DIV><!-- InstanceEndEditable --><!-- InstanceBeginEditable name="EditRegion2" -->
<P class=title1>一、什么是動態SQL</P>
<P>大多數PL/SQL都做著一件特殊的結果可預知的工作。例如,一個存儲過程可能接受一個雇員的編號和他的提薪金額,然后更新表emp中的信息。在這種情況下,UPDATE的全部文本內容在編譯期就完全確定下來,這樣的語句不會隨著程序的執行而發生變化。所以,稱它們為靜態SQL語句。
</P>
<P>但是,有些程序只能是在運行時建立并處理不同的SQL語句。例如,一般用途的報告打印就可能會根據用戶的選擇內容不同,而使我們的SELECT內容也隨之變化,然后打印出相應的數據來。這樣的語句在編譯期是無法確定它的內容的,所以稱它們為動態SQL語句。
</P>
<P>動態SQL語句是在運行時由程序創建的字符串,它們必須是有效的SQL語句或PL/SQL塊。它們也可以包含用于數據綁定的占位符。占位符是未聲明的標識符,所以,它的名稱并不重要,只需以冒號開頭。例如,對于下面的字符串來說,PL/SQL不會認為它們有什么不同:
</P>
<BLOCKQUOTE>
<TABLE>
<TBODY>
<TR>
<TD
noWrap><EM>'DELETE FROM emp WHERE sal > :my_sal AND comm < :my_comm'</EM><BR><EM>'DELETE FROM emp WHERE sal > :s AND comm < :c'</EM>
</TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P>我們使用EXECUTE
IMMEDIATE語句處理大多數的動態SQL語句。但是,要處理多行查詢(SELECT語句),就必須使用OPEN-FOR、FETCH和CLOSE語句。
</P>
<P class=title1>二、動態SQL的需求</P>
<P>只有在下的情況下我們才需要使用動態SQL: </P>
<OL>
<LI>執行數據定義語句(如CREAET),數據控制語句(如GRANT)或會話控制語句(如ALTER
SESSION)。因為在PL/SQL中,這樣的語句是不允許靜態執行的。
<LI>為了獲取更多的靈活性。例如,我們想在運行時根據我們自己的實際需求來為SELECT語句的WHERE子句選擇不同的schema對象。
<LI>動態地使用包DBMS_SQL執行SQL語句,但是為了獲得更好的性能,靈活方便或是DBMS_SQL不支持的功能(如對象和集合的操作)。
</LI></OL>
<P class=title1>三、使用EXECUTE IMMEDIATE語句</P>
<P>EXECUTE IMMEDIATE語句能分析要執行動態的SQL語句或是匿名PL/SQL塊。語法如下:
</P>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -