亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 第五章 pl-sql集合與記錄(2) - pl-sql用戶指南與參考 - whatiswhat.htm

?? sql初學者不錯的教程
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
                        DELETE語句使用批量綁定,就要用PL/SQL的FORALL語句。</P>
                        <P>如果要在SELECT語句中使用批量綁定,我們就要在SELECT語句后面加上一個BULK 
                        COLLECT子句來代替INTO子句。 </P>
                        <UL>
                          <LI>例一:對DELETE語句應用批量綁定 </LI></UL>
                        <P>下面的DELETE語句只往SQL引擎中發送一次,即使是執行了三次DELETE操作:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;numlist&nbsp;<STRONG>IS</STRONG>&nbsp;VARRAY(20)&nbsp;<STRONG>OF</STRONG>&nbsp;<STRONG>NUMBER</STRONG>;<BR><BR>&nbsp;&nbsp;depts&nbsp;&nbsp;&nbsp;numlist&nbsp;:=&nbsp;numlist(10,&nbsp;30,&nbsp;70);&nbsp;&nbsp;&nbsp;<EM>--&nbsp;department&nbsp;numbers</EM><BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;depts.FIRST&nbsp;..&nbsp;depts.LAST<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>DELETE</STRONG>&nbsp;<STRONG>FROM</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;deptno&nbsp;=&nbsp;depts(i);<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <UL>
                          <LI>例二:對INSERT語句應用批量綁定 </LI></UL>
                        <P>下例中,我們把5000個零件編號和名稱放到索引表中。所有的表元素都向數據庫插入兩次:第一次使用FOR循環,然后使用FORALL語句。實際上,FORALL版本的代碼執行速度要比FOR語句版本的快得多。</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>SQL</STRONG>&gt;&nbsp;<STRONG>SET</STRONG>&nbsp;SERVEROUTPUT&nbsp;<STRONG>ON</STRONG><BR><STRONG>SQL</STRONG>&gt;&nbsp;<STRONG>CREATE</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;parts&nbsp;(pnum&nbsp;<STRONG>NUMBER</STRONG>(4),&nbsp;pname&nbsp;<STRONG>CHAR</STRONG>(15));<BR>Table&nbsp;created.<BR><STRONG>SQL</STRONG>&gt;&nbsp;GET&nbsp;test.sql<BR>1&nbsp;<STRONG>DECLARE</STRONG><BR>2&nbsp;<STRONG>TYPE</STRONG>&nbsp;NumTab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;<STRONG>NUMBER</STRONG>(4)&nbsp;<STRONG>INDEX</STRONG>&nbsp;<STRONG>BY</STRONG>&nbsp;<STRONG>BINARY_INTEGER</STRONG>;<BR>3&nbsp;<STRONG>TYPE</STRONG>&nbsp;NameTab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;<STRONG>CHAR</STRONG>(15)&nbsp;<STRONG>INDEX</STRONG>&nbsp;<STRONG>BY</STRONG>&nbsp;<STRONG>BINARY_INTEGER</STRONG>;<BR>4&nbsp;pnums&nbsp;NumTab;<BR>5&nbsp;pnames&nbsp;NameTab;<BR>6&nbsp;t1&nbsp;<STRONG>NUMBER</STRONG>(5);<BR>7&nbsp;t2&nbsp;<STRONG>NUMBER</STRONG>(5);<BR>8&nbsp;t3&nbsp;<STRONG>NUMBER</STRONG>(5);<BR>9<BR>10<BR>11&nbsp;<STRONG>BEGIN</STRONG><BR>12&nbsp;<STRONG>FOR</STRONG>&nbsp;j&nbsp;<STRONG>IN</STRONG>&nbsp;1..5000&nbsp;<STRONG>LOOP</STRONG>&nbsp;&nbsp;&nbsp;<EM>--&nbsp;load&nbsp;index-by&nbsp;tables</EM><BR>13&nbsp;pnums(j)&nbsp;:=&nbsp;j;<BR>14&nbsp;pnames(j)&nbsp;:=&nbsp;<EM>'Part&nbsp;No.&nbsp;'</EM>&nbsp;||&nbsp;TO_CHAR(j);<BR>15&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>;<BR>16&nbsp;t1&nbsp;:=&nbsp;dbms_utility.get_time;<BR>17&nbsp;<STRONG>FOR</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;1..5000&nbsp;<STRONG>LOOP</STRONG>&nbsp;&nbsp;&nbsp;<EM>--&nbsp;use&nbsp;FOR&nbsp;loop</EM><BR>18&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;parts&nbsp;<STRONG>VALUES</STRONG>&nbsp;(pnums(i),&nbsp;pnames(i));<BR>19&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>;<BR>20&nbsp;t2&nbsp;:=&nbsp;dbms_utility.get_time;<BR>21&nbsp;<STRONG>FORALL</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;1..5000&nbsp;&nbsp;&nbsp;<EM>--&nbsp;use&nbsp;FORALL&nbsp;statement</EM><BR>22&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;parts&nbsp;<STRONG>VALUES</STRONG>&nbsp;(pnums(i),&nbsp;pnames(i));<BR>23&nbsp;get_time(t3);<BR>24&nbsp;dbms_output.put_line(<EM>'Execution&nbsp;Time&nbsp;(secs)'</EM>);<BR>25&nbsp;dbms_output.put_line(<EM>'---------------------'</EM>);<BR>26&nbsp;dbms_output.put_line(<EM>'FOR&nbsp;loop:&nbsp;'</EM>&nbsp;||&nbsp;TO_CHAR(t2&nbsp;-&nbsp;t1));<BR>27&nbsp;dbms_output.put_line(<EM>'FORALL:&nbsp;'</EM>&nbsp;||&nbsp;TO_CHAR(t3&nbsp;-&nbsp;t2));<BR>28*&nbsp;<STRONG>END</STRONG>;<BR><STRONG>SQL</STRONG>&gt;&nbsp;/<BR>Execution&nbsp;Time&nbsp;(secs)<BR><EM>---------------------</EM><BR>FOR&nbsp;loop:&nbsp;32<BR>FORALL:&nbsp;3<BR></TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P class=title1>十三、使用FORALL語句</P>
                        <P>關鍵字FORALL能讓PL/SQL引擎在將集合發送到SQL引擎之前,批量導入集合元素。雖然FORALL也包含了迭代的模式,但它并不是簡單的FOR循環。它的使用語法如下:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>FORALL</STRONG>&nbsp;index&nbsp;<STRONG>IN</STRONG>&nbsp;lower_bound..upper_bound<BR>&nbsp;&nbsp;sql_statement; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>index只能在FORALL語句塊內作為集合下標使用。SQL語句必須是引用了集合元素的INSERT、UPDATE或DELETE語句。bound的有效范圍是連續的索引號。在這個范圍內,SQL引擎為每個索引號執行一次SQL語句。</P>
                        <UL>
                          <LI>例一:使用FORALL操作集合的部分內容 </LI></UL>
                        <P>如下例所示,FORALL循環的邊界值可作用于集合的部分內容,不必是全部的元素:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;numlist&nbsp;<STRONG>IS</STRONG>&nbsp;VARRAY(10)&nbsp;<STRONG>OF</STRONG>&nbsp;<STRONG>NUMBER</STRONG>;<BR><BR>&nbsp;&nbsp;depts&nbsp;&nbsp;&nbsp;numlist&nbsp;:=&nbsp;numlist(20,&nbsp;30,&nbsp;50,&nbsp;55,&nbsp;57,&nbsp;60,&nbsp;70,&nbsp;75,&nbsp;90,&nbsp;92);<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;j&nbsp;<STRONG>IN</STRONG>&nbsp;4&nbsp;..&nbsp;7&nbsp;&nbsp;&nbsp;<EM>--&nbsp;bulk-bind&nbsp;only&nbsp;part&nbsp;of&nbsp;varray</EM><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>UPDATE</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SET</STRONG>&nbsp;sal&nbsp;=&nbsp;sal&nbsp;*&nbsp;1.10<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;deptno&nbsp;=&nbsp;depts(j);<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <UL>
                          <LI>例二:使用集合下標索引的批量綁定 </LI></UL>
                        <P>SQL語句能引用一個以上的集合。但是PL/SQL引擎的批量綁定只能為一個集合添加下標索引。所以,在下面的例子中,對于傳遞給函數median的集合sals,并沒有使用到批量綁定。</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>FORALL</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;1..20<BR>&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;emp2&nbsp;<STRONG>VALUES</STRONG>&nbsp;(enums(i),&nbsp;names(i),&nbsp;median(sals),&nbsp;...); 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <UL>
                          <LI>例三:使用FORALL為對象表添加數據 </LI></UL>
                        <P>除了關系表之外,FORALL語句還可以操作對象表,如下例所示:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>CREATE</STRONG>&nbsp;<STRONG>TYPE</STRONG>&nbsp;pnum&nbsp;<STRONG>AS</STRONG>&nbsp;OBJECT(<BR>&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;<STRONG>NUMBER</STRONG><BR>);<BR>/<BR><BR><STRONG>CREATE</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;partno&nbsp;<STRONG>OF</STRONG>&nbsp;pnum;<BR><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;numtab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;<STRONG>NUMBER</STRONG>;<BR><BR>&nbsp;&nbsp;nums&nbsp;&nbsp;&nbsp;&nbsp;numtab&nbsp;&nbsp;:=&nbsp;numtab(1,&nbsp;2,&nbsp;3,&nbsp;4);<BR><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;pnumtab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;pnum;<BR><BR>&nbsp;&nbsp;pnums&nbsp;&nbsp;&nbsp;pnumtab&nbsp;:=&nbsp;pnumtab(pnum(1),&nbsp;pnum(2),&nbsp;pnum(3),&nbsp;pnum(4));<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;pnums.FIRST&nbsp;..&nbsp;pnums.LAST<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;partno<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(pnums(i));<BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;nums.FIRST&nbsp;..&nbsp;nums.LAST<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>DELETE</STRONG>&nbsp;<STRONG>FROM</STRONG>&nbsp;partno<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;n&nbsp;=&nbsp;2&nbsp;*&nbsp;nums(i);<BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;nums.FIRST&nbsp;..&nbsp;nums.LAST<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;partno<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(100&nbsp;+&nbsp;nums(i));<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P class=title2>1、FORALL語句對回滾的影響</P>
                        <P>在FORALL語句中,如果SQL語句引起了一個未捕獲異常,以前對數據庫的所有操作都會被回滾。但是,如果我們捕獲到被拋出的異常并加以處理,此次之前的操作就不會被回滾。舉一個例子,假設我們創建了數據表用來存儲部門編號和職別: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>CREATE</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;emp2&nbsp;(deptno&nbsp;<STRONG>NUMBER</STRONG>(2),&nbsp;job&nbsp;<STRONG>VARCHAR2</STRONG>(15)); 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>下一步,為剛才建立的數據表添加一些記錄:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;emp2&nbsp;<STRONG>VALUES</STRONG>(10,&nbsp;<EM>'Clerk'</EM>);<BR><STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;emp2&nbsp;<STRONG>VALUES</STRONG>(10,&nbsp;<EM>'Clerk'</EM>);<BR><STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;emp2&nbsp;<STRONG>VALUES</STRONG>(20,&nbsp;<EM>'Bookkeeper'</EM>);&nbsp;&nbsp;&nbsp;<EM>--&nbsp;10-char&nbsp;job&nbsp;title</EM><BR><STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;emp2&nbsp;<STRONG>VALUES</STRONG>(30,&nbsp;<EM>'Analyst'</EM>);<BR><STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;emp2&nbsp;<STRONG>VALUES</STRONG>(30,&nbsp;<EM>'Analyst'</EM>); 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>然后,我們用下面的UPDATE語句為特定的職稱加上七位字符串' (temp)':</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;numlist&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;<STRONG>NUMBER</STRONG>;<BR><BR>&nbsp;&nbsp;depts&nbsp;&nbsp;&nbsp;numlist&nbsp;:=&nbsp;numlist(10,&nbsp;20,&nbsp;30);<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;j&nbsp;<STRONG>IN</STRONG>&nbsp;depts.FIRST&nbsp;..&nbsp;depts.LAST<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>UPDATE</STRONG>&nbsp;emp2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SET</STRONG>&nbsp;job&nbsp;=&nbsp;job&nbsp;||&nbsp;<EM>'&nbsp;(temp)'</EM><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;deptno&nbsp;=&nbsp;depts(j);<BR>&nbsp;&nbsp;<EM>--&nbsp;raises&nbsp;a&nbsp;"value&nbsp;too&nbsp;large"&nbsp;exception</EM><BR><STRONG>EXCEPTION</STRONG><BR>&nbsp;&nbsp;<STRONG>WHEN</STRONG>&nbsp;<STRONG>OTHERS</STRONG>&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>COMMIT</STRONG>;<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>SQL引擎會執行UPDATE語句三次,第一次成功,但在第二次會因字符串值'Bookkeeper 
                        (temp)'太長而無法賦給job字段,所以就會執行失敗。這種情況下,只有第二條語句回滾。</P>
                        <P>只要有SQL語句拋出異常,FORALL語句就會終止執行。在上面的例子中,第二個UPDATE語句拋出了異常,第三個語句就不會被執行了。</P>
                        <P 
                        class=title2>2、使用%BULK_ROWCOUNT屬性來計算FORALL語句所影響到的行數</P>
                        <P>處理SQL數據操作語句時,SQL引擎會隱式地打開一個名為SQL的游標。這個游標的標量屬性%FOUND、%ISOPEN、%NOTFOUND和%ROWCOUNT,能夠提供最近一次執行的SQL數據操作語句信息。</P>
                        <P>SQL游標還有一個專門為FORALL設計的復合屬性%BULK_ROWCOUNT。這個屬性有些像索引表。它的第i個元素保存了第i次的 
                        INSERT或UPDATE或DELETE語句所影響到的行數。如果第i次操作沒有行被影響,%BULK_ROWCOUNT(i)就返回零。下面來看一個例子:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;numlist&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;<STRONG>NUMBER</STRONG>;<BR><BR>&nbsp;&nbsp;depts&nbsp;&nbsp;&nbsp;numlist&nbsp;:=&nbsp;numlist(10,&nbsp;20,&nbsp;50);<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;j&nbsp;<STRONG>IN</STRONG>&nbsp;depts.FIRST&nbsp;..&nbsp;depts.LAST<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>UPDATE</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SET</STRONG>&nbsp;sal&nbsp;=&nbsp;sal&nbsp;*&nbsp;1.10<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;deptno&nbsp;=&nbsp;depts(j);<BR>&nbsp;&nbsp;<EM>--&nbsp;Did&nbsp;the&nbsp;3rd&nbsp;UPDATE&nbsp;statement&nbsp;affect&nbsp;any&nbsp;rows?</EM><BR>&nbsp;&nbsp;<STRONG>IF</STRONG>&nbsp;<STRONG>SQL</STRONG>%BULK_ROWCOUNT(3)&nbsp;=&nbsp;0&nbsp;<STRONG>THEN</STRONG>&nbsp;...<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>FORALL語句和%BULK_ROWCOUNT屬性使用同樣的下標索引。如果FORALL使用下標索引的范圍在5到10的話,那么% 
                        BULK_ROWCOUNT的也是。對于插入操作來說,%BULK_ROWCOUNT的結果一般是1,但是對于INSERT 
                        ... 
                        SELECT這樣的結構來說,%BULK_ROWCOUNT的值就有可能大于1。例如,下面的FORALL語句在循環插入數據的過程中,每次插入的行的個數都是不固定的,%BULK_ROWCOUNT可以記錄每次插入的行數: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>SET</STRONG>&nbsp;SERVEROUTPUT&nbsp;<STRONG>ON</STRONG>;<BR><BR><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;num_tab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;<STRONG>NUMBER</STRONG>;<BR><BR>&nbsp;&nbsp;deptnums&nbsp;&nbsp;&nbsp;num_tab;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;deptno<BR>&nbsp;&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;deptnums<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;dept;<BR><BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;1&nbsp;..&nbsp;deptnums.COUNT<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;emp_by_dept<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;empno,&nbsp;deptno<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;deptno&nbsp;=&nbsp;deptnums(i);<BR><BR>&nbsp;&nbsp;<STRONG>FOR</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;1&nbsp;..&nbsp;deptnums.COUNT&nbsp;<STRONG>LOOP</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;Count&nbsp;how&nbsp;many&nbsp;rows&nbsp;were&nbsp;inserted&nbsp;for&nbsp;each&nbsp;department;&nbsp;that&nbsp;is,</EM><BR>&nbsp;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;how&nbsp;many&nbsp;employees&nbsp;are&nbsp;in&nbsp;each&nbsp;department.</EM><BR>&nbsp;&nbsp;&nbsp;&nbsp;DBMS_OUTPUT.put_line(&nbsp;&nbsp;&nbsp;<EM>'Dept&nbsp;'</EM><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;deptnums(i)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<EM>':&nbsp;inserted&nbsp;'</EM><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<STRONG>SQL</STRONG>%BULK_ROWCOUNT(i)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<EM>'&nbsp;records'</EM>);<BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>;<BR><BR>&nbsp;&nbsp;DBMS_OUTPUT.put_line(<EM>'Total&nbsp;records&nbsp;inserted&nbsp;='</EM>&nbsp;||&nbsp;<STRONG>SQL</STRONG>%ROWCOUNT);<BR><STRONG>END</STRONG>;<BR>/ 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>我們還可以在批量綁定中使用標量屬性%FOUND、%ISOPEN、%NOTFOUND和%ROWCOUNT。例如,%ROWCOUNT會返回所有的SQL語句處理的總行數。</P>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产很黄免费观看久久| 一区二区三区欧美视频| 国产精品久久99| 亚洲va欧美va人人爽午夜 | 精品久久久久久无| 亚洲美女在线一区| 国产老女人精品毛片久久| 在线免费视频一区二区| 国产日韩欧美精品一区| 免费在线视频一区| 欧美日韩国产天堂| 亚洲三级久久久| 成人精品鲁一区一区二区| 日韩免费福利电影在线观看| 亚洲一区在线视频| 成人av影视在线观看| 久久这里都是精品| 秋霞国产午夜精品免费视频| 成人午夜视频免费看| ww久久中文字幕| 伦理电影国产精品| 91精品国产欧美一区二区18| 亚洲一卡二卡三卡四卡无卡久久 | 7777精品伊人久久久大香线蕉| 1024成人网| 成人黄色在线看| 国产精品久久久久久久久果冻传媒| 极品瑜伽女神91| 日韩视频国产视频| 久久国产麻豆精品| 日韩欧美综合在线| 七七婷婷婷婷精品国产| 欧美精品tushy高清| 午夜视频在线观看一区二区三区| 99久久精品国产导航| 国产精品国产三级国产a | 色综合一区二区| 亚洲日本一区二区| av成人动漫在线观看| 中文字幕一区三区| 色一区在线观看| 亚洲国产中文字幕在线视频综合 | 国产精品自在欧美一区| 久久久噜噜噜久久人人看 | 91在线无精精品入口| 亚洲欧美国产高清| 欧美日韩精品一区视频| 日韩有码一区二区三区| 日韩一区二区在线看| 国内久久精品视频| 国产精品久久久久影院亚瑟| 91浏览器入口在线观看| 亚洲午夜一二三区视频| 91精品国产免费久久综合| 麻豆专区一区二区三区四区五区| 26uuu国产电影一区二区| 国产一区二区视频在线| 中文字幕电影一区| 欧美色精品在线视频| 免费av网站大全久久| 国产欧美久久久精品影院| 91丨porny丨中文| 五月激情综合网| 久久久久国产精品免费免费搜索| 成人高清免费在线播放| 亚洲一区二区精品久久av| 国产女人18水真多18精品一级做| 粉嫩aⅴ一区二区三区四区| 亚洲四区在线观看| 91精品国产福利| 高清不卡一区二区| 丝袜美腿亚洲一区二区图片| 久久免费的精品国产v∧| 91久久精品日日躁夜夜躁欧美| 日日夜夜一区二区| 中文字幕亚洲不卡| 91精品国产综合久久久久久| 国产精品一区2区| 亚洲二区视频在线| 国产精品乱码一区二三区小蝌蚪| 欧美乱妇15p| av日韩在线网站| 久久国产精品99久久久久久老狼| 中文字幕一区二区三区在线观看| 91精品国产综合久久精品麻豆| 懂色av一区二区三区免费观看| 亚洲狠狠爱一区二区三区| 欧美激情资源网| 欧美一区二区黄| 欧美性xxxxxxxx| 99九九99九九九视频精品| 老司机精品视频在线| 亚洲午夜在线电影| 亚洲少妇中出一区| 国产农村妇女毛片精品久久麻豆| 日韩一区二区在线看| 欧美日韩成人在线| 欧美最新大片在线看| 不卡大黄网站免费看| 国产精品一区在线观看你懂的| 婷婷久久综合九色国产成人| 亚洲黄色片在线观看| 国产精品高潮呻吟| 国产日韩欧美不卡在线| 欧美电影免费观看高清完整版在线观看 | 日产国产高清一区二区三区| 亚洲精品少妇30p| 亚洲天堂网中文字| 国产精品萝li| 日本一区二区三区免费乱视频| 日韩女优视频免费观看| 久久这里只有精品首页| 日韩一区二区三区视频| 51精品国自产在线| 欧美一区二区久久| 欧美一区二区三区视频免费 | 欧美电影免费观看完整版| 91精品国产综合久久久久久久久久| 色屁屁一区二区| 欧美中文字幕一区二区三区亚洲| 97精品视频在线观看自产线路二| av亚洲精华国产精华精| 一本到高清视频免费精品| 日本精品一级二级| 欧美伦理视频网站| 日韩三级中文字幕| 久久蜜桃av一区二区天堂| 国产日产欧美一区二区视频| 欧美国产日韩亚洲一区| 国产精品国产三级国产有无不卡| 中文字幕制服丝袜一区二区三区| 国产精品乱码一区二区三区软件| 成人免费小视频| 午夜精品免费在线观看| 蜜臀av一区二区在线观看| 国产在线视频不卡二| 国产大陆亚洲精品国产| jlzzjlzz国产精品久久| 色综合激情久久| 欧美狂野另类xxxxoooo| 精品国产自在久精品国产| 亚洲国产精品高清| 亚洲欧美另类图片小说| 日日夜夜精品视频天天综合网| 精品一区二区三区免费毛片爱| 成人一区在线观看| 欧美色图片你懂的| 亚洲精品一线二线三线| 国产精品国模大尺度视频| 亚洲电影视频在线| 国产69精品久久777的优势| 色婷婷精品久久二区二区蜜臀av| 91精品国产91热久久久做人人| 久久久久免费观看| 亚洲成人综合网站| 国产高清亚洲一区| 欧美妇女性影城| 国产精品国产三级国产aⅴ中文| 亚洲自拍都市欧美小说| 国产福利视频一区二区三区| 色哦色哦哦色天天综合| 精品美女在线播放| 亚洲一区二区三区激情| 国产99精品视频| 欧美精品久久天天躁| 国产精品久久久久久久久快鸭| 日韩国产欧美在线播放| 9i在线看片成人免费| 日韩精品一区二区在线| 亚洲激情图片qvod| 国产a区久久久| 色94色欧美sute亚洲线路一ni | 国内精品不卡在线| 欧美伊人精品成人久久综合97| 精品处破学生在线二十三| 亚洲国产中文字幕在线视频综合 | 首页国产欧美日韩丝袜| 成+人+亚洲+综合天堂| 精品久久久久av影院| 午夜av区久久| 欧美性猛片xxxx免费看久爱| 久久精品视频免费| 在线亚洲+欧美+日本专区| 亚洲青青青在线视频| 在线精品视频免费播放| 麻豆极品一区二区三区| 欧美色综合网站| 奇米色一区二区| 日韩午夜中文字幕| 国产成人在线影院| 日本一区二区电影| 在线观看一区二区视频| 亚洲婷婷国产精品电影人久久| 色婷婷亚洲婷婷| 亚洲成人免费电影| 亚洲影院免费观看| 一区二区三区自拍| 婷婷开心激情综合| 欧美日韩国产另类一区| 五月天一区二区|