PLSQL入门与精通(第62章:批量绑定FETCH INTO COLLECT INTO)

上一次,我们说明了一下用SELECT BULK COLLECCT INTO的语句进行批量绑定的方式进行取得数据。

本章节说明一下显示游标的FETCH INTO文的批量绑定方式:FETCH BULK COLLEC INTO。

使用FETCH BULK COLLECCT INTO语句的话,可以把FETCH到的所有行一起放到结果集中,也成为了批量绑定方式。
因此,比一行一行地FETCH,性能要好得多。

接下来,我们分别就普通FETCH INTO文的处理和FETCH BULK COLLECCT INTO文的处理进行说明和比较。

TEST01表:

SQL> DESC TEST01

名称 格式


A NUMBER
B VARCHAR2(10)

表里之用以下10行数据,作为例子进行说明:

SQL> SELECT * FROM TEST01 ORDER BY A;
A B


1 AA
2 BB
3 CC
4 DD
5 EE
6 FF
7 GG
8 HH
9 II
10 JJ

选择了10行。

首先使用普通的FETCH INTO文进行显示游标处理:

启用画面显示
SQL> SET SERVEROUTPUT ON

执行以下语句:

SQL> DECLARE
2 --声明游标
3 CURSOR C1 IS SELECT * FROM TEST01 ORDER BY A;
4 --声明记录类型的变量
5 REC C1%ROWTYPE;

6 BEGIN
7 OPEN C1;–打开游标(生成结果集并打开)
8 LOOP-循环处理
9 FETCH C1 INTO REC;-提取1行数据
10 EXIT WHEN C1%NOTFOUND;
11 DBMS_OUTPUT.PUT_LINE(REC.B);–在画面上显示B列的内容
12 END LOOP;
13 CLOSE C1;–关闭游标(关闭打开的结果集)
14 END;
15 /

AA
BB
CC
DD
EE
FF
GG
HH
II
JJ

PL/SQL过程成功完成。

以上是显示游标处理一般的处理方式。

接下来是使用FETCH BULK COLLEC INTO语句进行批量绑定的方式进行处理。

SQL> DECLARE
2 --声明游标
3 CURSOR C1 IS SELECT * FROM TEST01 ORDER BY A;

4 --声明记录类型变量的数组类型
5 TYPE RECTAB_TYPE IS TABLE OF C1%ROWTYPE INDEX BY BINARY_INTEGER;

6 -定义记录类型的配列
7 RECTAB RECTAB_TYPE;

8 --数组变量
9 J BINARY_INTEGER;

10 BEGIN
11 OPEN C1;–打开游标(生成结果集并打开)
12 FETCH C1 BULK COLLECCT INTO RECTAB;–采集结果集里所有数据
13 CLOSE C1;–关闭游标(关闭打开的结果集)

14 --按相反顺序显示数组RECTAB的值
15 J := RECTAB.LAST;–取得配列的最后一个索引值(10号)
16 LOOP-循环处理
17 DBMS_OUTPUT.PUT_LINE(RECTAB(J).B);–在画面上显示
18 EXIT WHEN J = RECTAB.FIRST;–如果是配列的第一个索引值,则退出循环
19 J := RECTAB.PRIOR(J);–取得前一个配列的索引值
20 END LOOP;
21 END;
22 /

JJ
II
HH
GG
FF
EE
DD
CC
BB
AA

PL/SQL过程成功完成。

例子解释如下:

首先,在FETCH BULK COLLEC INTO语句中,因为要统一存储多行数据,所以存储的目标变量必须是数组类型和数组变量。
所以第5行声明了数组类型,第7行使用该类型声明了数组变量
第11行:在执行部打开游标
第12行:打开的游表结果集所有数据整体存储到数组变量中。
第13行:关闭游标(是取出所有的行之后,结果集不需要用了,所以需要及时关闭游标)
通过关闭游标,结果集也会被释放掉,但数组是保留的。
数组与结果集不同,数组可以随机访问任意位置,我们例子是倒叙吧数据遍历了一遍并显示到画面上了。
(JJ→II→・・BB→AA)

总结一下:
FETCH BULK COLLECCT INTO语句的结构如下:

FETCH 游标名 BULK COLLECCT INTO 配列变量 [LIMIT行数]

在上述语法中,[LIMIT行数]的部分是可选的,但是可以指定一次批量提取的行数。

这是SELECT BULK COLLECCT INTO语句中没有的功能。

LIMIT语句可以抑制内存的使用量,有助于提高性能。下章,解说LIMIT语句。

本次到此为止。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值