⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第五章 pl-sql集合与记录(2) - pl-sql用户指南与参考 - whatiswhat.htm

📁 sql初学者不错的教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                        <P>%FOUND和%NOTFOUND只是针对最后一次SQL语句执行的结果。但是,我们可以利用%BULK_ROWCOUNT来推断出每个单独语句的处理结果。当%BULK_ROWCOUNT(i)为零时,%FOUND和%NOTFOUND就分别为FALSE和TRUE。 
                        </P>
                        <P class=title2>3、使用%BULK_EXCEPTIONS属性来控制FORALL异常</P>
                        <P>PL/SQL为FORALL语句提供了一个异常控制机制。这个机制能让使用批量绑定的操作保存异常信息并不中断地执行直至完成操作。</P>
                        <P>为了让批量绑定在错误发生时还能够继续执行,需要在FORALL语句中添加关键字SAVE 
                        EXCEPTIONS,语法如下: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>FORALL</STRONG>&nbsp;index&nbsp;<STRONG>IN</STRONG>&nbsp;lower_bound..upper_bound&nbsp;SAVE&nbsp;EXCEPTIONS<BR>{insert_stmt&nbsp;|&nbsp;update_stmt&nbsp;|&nbsp;delete_stmt} 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>执行时发生的所有的异常信息都会保存在新的游标属性%BULK_EXCEPTIONS中。%BULK_EXCEPTIONS是一个记录类型集合,每个记录有两个域,分别是ERROR_INDEX和ERROR_CODE,前者保存FORALL语句的"循环"索引,后者保存对应的Oracle错误编号。</P>
                        <P>存放在%BULK_EXCEPTIONS中的值总是与最近一次FORALL语句执行的结果相关,异常的个数存放在%BULK_EXCEPTIONS 
                        的COUNT属性中,%BULK_EXCEPTIONS有效的下标索引范围在1到%BULK_EXCEPTIONS.COUNT之间。</P>
                        <P>我们不使用关键字SAVE 
                        EXCEPTIONS时,如果异常发生,FORALL语句就会停止执行,SQL%BULK_EXCEPTIONS.COUNT的值就是一,SQL% 
                        BULK_EXCEPTIONS中只包含一条记录;如果没有异常发生,SQL%BULK_EXCEPTIONS.COUNT的值就是零。下面的例子演示了 
                        %BULK_EXCEPTIONS的一些用法: </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;num_tab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numlist&nbsp;&nbsp;:=&nbsp;numlist(10,&nbsp;0,&nbsp;11,&nbsp;12,&nbsp;30,&nbsp;0,&nbsp;20,&nbsp;199,&nbsp;2,&nbsp;0,&nbsp;9,&nbsp;1);<BR>&nbsp;&nbsp;ERRORS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>NUMBER</STRONG>;<BR>&nbsp;&nbsp;dml_errors&nbsp;&nbsp;&nbsp;<STRONG>EXCEPTION</STRONG>;<BR>&nbsp;&nbsp;<STRONG>PRAGMA</STRONG>&nbsp;EXCEPTION_INIT(dml_errors,&nbsp;-24381);<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>FORALL</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;num_tab.FIRST&nbsp;..&nbsp;num_tab.LAST&nbsp;SAVE&nbsp;EXCEPTIONS<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;sal&nbsp;&gt;&nbsp;500000&nbsp;/&nbsp;num_tab(i);<BR><STRONG>EXCEPTION</STRONG><BR>&nbsp;&nbsp;<STRONG>WHEN</STRONG>&nbsp;dml_errors&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;ERRORS&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;<STRONG>SQL</STRONG>%BULK_EXCEPTIONS.COUNT;<BR>&nbsp;&nbsp;&nbsp;&nbsp;DBMS_OUTPUT.put_line(<EM>'Number&nbsp;of&nbsp;errors&nbsp;is&nbsp;'</EM>&nbsp;||&nbsp;ERRORS);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FOR</STRONG>&nbsp;i&nbsp;<STRONG>IN</STRONG>&nbsp;1&nbsp;..&nbsp;ERRORS&nbsp;<STRONG>LOOP</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBMS_OUTPUT.put_line(&nbsp;&nbsp;&nbsp;<EM>'Error&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;&nbsp;||&nbsp;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;&nbsp;||&nbsp;<EM>'&nbsp;occurred&nbsp;during&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;&nbsp;||&nbsp;<EM>'iteration&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;&nbsp;||&nbsp;<STRONG>SQL</STRONG>%BULK_EXCEPTIONS(i).ERROR_INDEX);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBMS_OUTPUT.put_line(&nbsp;&nbsp;&nbsp;<EM>'Oracle&nbsp;error&nbsp;is&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;&nbsp;||&nbsp;<STRONG>SQLERRM</STRONG>(-<STRONG>SQL</STRONG>%BULK_EXCEPTIONS(i).ERROR_CODE));<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>;<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>例子中,PL/SQL在i等于2、6、10时会抛出预定义异常ZERO_DIVIDE。当批量绑定完成时,SQL% 
                        BULK_EXCEPTIONS.COUNT就会返回3,SQL%BULK_EXCEPTIONS的内容就是(2,1476),(6,1476)和 
                        (10,1476)。如果想得到错误消息,我们可以把SQL%BULK_EXCEPTIONS(i).ERROR_CODE传递给错误报告函数 
                        SQLERRM,这样就能得到下面的输出结果: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>Number&nbsp;of&nbsp;errors&nbsp;is&nbsp;3<BR>Error&nbsp;1&nbsp;occurred&nbsp;during&nbsp;iteration&nbsp;2<BR>Oracle&nbsp;error&nbsp;is&nbsp;ORA-01476:&nbsp;divisor&nbsp;is&nbsp;equal&nbsp;to&nbsp;zero<BR>Error&nbsp;2&nbsp;occurred&nbsp;during&nbsp;iteration&nbsp;6<BR>Oracle&nbsp;error&nbsp;is&nbsp;ORA-01476:&nbsp;divisor&nbsp;is&nbsp;equal&nbsp;to&nbsp;zero<BR>Error&nbsp;3&nbsp;occurred&nbsp;during&nbsp;iteration&nbsp;10<BR>Oracle&nbsp;error&nbsp;is&nbsp;ORA-01476:&nbsp;divisor&nbsp;is&nbsp;equal&nbsp;to&nbsp;zero 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P class=title1>十四、利用BULK COLLECTION子句为集合赋值</P>
                        <P>关键字BULK 
                        COLLECT会通知SQL引擎在将数据返回给PL/SQL引擎之前,把输出的数据批量地绑定到一个集合。我们可以在SELECT 
                        INTO、FETCH INTO和RETURNING INTO子句中使用BULK COLLECT。语法如下: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>...&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;collection_name[,&nbsp;collection_name]&nbsp;... 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>SQL引擎能批量绑定出现在INTO列表后的所有集合。对应的字段可以保存为标量类型或复合类型的值,其中也包括对象类型。在下面的例子中,SQL引擎在把数据返回给PL/SQL引擎之前,它将完整的empno和ename绑定到嵌套表中:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;numtab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;emp.empno%<STRONG>TYPE</STRONG>;<BR><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;nametab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;emp.ename%<STRONG>TYPE</STRONG>;<BR><BR>&nbsp;&nbsp;enums&nbsp;&nbsp;&nbsp;numtab;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;no&nbsp;need&nbsp;to&nbsp;initialize</EM><BR>&nbsp;&nbsp;names&nbsp;&nbsp;&nbsp;nametab;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;empno,&nbsp;ename<BR>&nbsp;&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;enums,&nbsp;names<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp;<BR>&nbsp;&nbsp;...<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>接下来的例子中,SQL引擎会批量地把对象字段的值放到嵌套表中: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>CREATE</STRONG>&nbsp;<STRONG>TYPE</STRONG>&nbsp;coords&nbsp;<STRONG>AS</STRONG>&nbsp;OBJECT(<BR>&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;<STRONG>NUMBER</STRONG>,<BR>&nbsp;&nbsp;y&nbsp;&nbsp;&nbsp;<STRONG>NUMBER</STRONG><BR>);<BR><BR><STRONG>CREATE</STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>TABLE</STRONG>&nbsp;grid&nbsp;(num&nbsp;<STRONG>NUMBER</STRONG>,&nbsp;loc&nbsp;coords);<BR><STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;grid<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(10,&nbsp;coords(1,&nbsp;2));<BR><STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;grid<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(20,&nbsp;coords(3,&nbsp;4));<BR><BR><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;coordstab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;coords;<BR><BR>&nbsp;&nbsp;pairs&nbsp;&nbsp;&nbsp;coordstab;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;loc<BR>&nbsp;&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;pairs<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;grid;<BR><EM>&nbsp;&nbsp;--&nbsp;now&nbsp;pairs&nbsp;contains&nbsp;(1,2)&nbsp;and&nbsp;(3,4)</EM><BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>SQL引擎会为我们初始化和扩展集合(但是,它不能把变长数组的长度扩大到超过变长数组的最大长度值)。然后从索引1开始,连续地插入元素并覆盖先前已存在的元素。 
                        </P>
                        <P>SQL引擎能批量绑定整个字段。所以,如果一个数据表中有50000行记录,引擎就会一次性加载50000个值到目标集合中去。但是,我们可以使用伪列ROWNUM来限制要处理的行记录个数。下例中,我们把每次处理的记录个数限制为100:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;sallist&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;emp.sal%<STRONG>TYPE</STRONG>;<BR><BR>&nbsp;&nbsp;sals&nbsp;&nbsp;&nbsp;sallist;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;sal<BR>&nbsp;&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;sals<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;<STRONG>ROWNUM</STRONG>&nbsp;&lt;=&nbsp;100;<BR>&nbsp;&nbsp;...<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P class=title2>1、从游标中批量取得数据的例子</P>
                        <UL>
                          <LI>插入一个或多个集合 </LI></UL>
                        <P>我们可以从游标中批量取得数据并绑定到一个或多个集合中去: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;namelist&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;emp.ename%<STRONG>TYPE</STRONG>;<BR><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;sallist&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;emp.sal%<STRONG>TYPE</STRONG>;<BR><BR>&nbsp;&nbsp;<STRONG>CURSOR</STRONG>&nbsp;c1&nbsp;<STRONG>IS</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;ename,&nbsp;sal<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;sal&nbsp;&gt;&nbsp;1000;<BR><BR>&nbsp;&nbsp;names&nbsp;&nbsp;&nbsp;namelist;<BR>&nbsp;&nbsp;sals&nbsp;&nbsp;&nbsp;&nbsp;sallist;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>OPEN</STRONG>&nbsp;c1;<BR><BR>&nbsp;&nbsp;<STRONG>FETCH</STRONG>&nbsp;c1<BR>&nbsp;&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;names,&nbsp;sals;<BR><STRONG>END</STRONG>; </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <UL>
                          <LI>绑定记录类型的集合 </LI></UL>
                        <P>我们可以批量取得数据并绑定到记录类型的集合中去: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>TYPE</STRONG>&nbsp;deptrectab&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>TABLE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;dept%<STRONG>ROWTYPE</STRONG>;<BR><BR>&nbsp;&nbsp;dept_recs&nbsp;&nbsp;&nbsp;deptrectab;<BR><BR>&nbsp;&nbsp;<STRONG>CURSOR</STRONG>&nbsp;c1&nbsp;<STRONG>IS</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;deptno,&nbsp;dname,&nbsp;loc<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;dept<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;deptno&nbsp;&gt;&nbsp;10;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>OPEN</STRONG>&nbsp;c1;<BR><BR>&nbsp;&nbsp;<STRONG>FETCH</STRONG>&nbsp;c1<BR>&nbsp;&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;dept_recs;<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P class=title2>2、使用LIMIT子句限制FETCH操作批量取得的数据个数 </P>
                        <P>可选的LIMIT子句只允许出现在FETCH操作语句的批量中,它能够帮助我们限制批量取得的数据数量,语法如下: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>FETCH</STRONG>&nbsp;...&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;...&nbsp;[LIMIT&nbsp;rows]; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>其中rows可以是文字,变量或表达式,但它的计算结果必须是一个数字。否则的话,PL/SQL就会抛出预定义异常VALUE_ERROR。如果 
                        rows是非正数,PL/SQL会抛出INVALID_NUMBER异常。在必要的时候,PL/SQL还会将数字四舍五入到rows最接近的整数。</P>
                        <P>在下面的例子中,每次FETCH操作都会取出10条记录放到索引表empno中去,之前的数据内容会被当前的数据所覆盖: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><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>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INDEX</STRONG>&nbsp;<STRONG>BY</STRONG>&nbsp;<STRONG>BINARY_INTEGER</STRONG>;<BR><BR>&nbsp;&nbsp;<STRONG>CURSOR</STRONG>&nbsp;c1&nbsp;<STRONG>IS</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;empno<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp;<BR><BR>&nbsp;&nbsp;empnos&nbsp;&nbsp;&nbsp;numtab;<BR>&nbsp;&nbsp;ROWS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>NATURAL</STRONG>&nbsp;:=&nbsp;10;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>OPEN</STRONG>&nbsp;c1;<BR><BR>&nbsp;&nbsp;<STRONG>LOOP</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<EM>/*&nbsp;The&nbsp;following&nbsp;statement&nbsp;fetches&nbsp;10&nbsp;rows&nbsp;(or&nbsp;less).&nbsp;*/</EM><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FETCH</STRONG>&nbsp;c1<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>BULK</STRONG>&nbsp;<STRONG>COLLECT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;empnos&nbsp;LIMIT&nbsp;ROWS;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>EXIT</STRONG>&nbsp;<STRONG>WHEN</STRONG>&nbsp;c1%NOTFOUND;<BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>;<BR><BR>&nbsp;&nbsp;<STRONG>CLOSE</STRONG>&nbsp;c1;<BR><STRONG>END</STRONG>; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -