PLSQL入门到精通(第13章:集合类型和变量)

这次就和上次的记录变量一样,作为构造复杂的变量,对集合变量进行说明。
集合变量是可以存储多个数据类型值的变量。
数据类型可以是基本简单的数据类型,如NUMBER,
也可以是用户定义的记录类型等复杂的数据类型。
作为集合变量的一个应用示例,游表关闭后,无法再次提取游标得值的时候,
可以在游标处理中使用集合变量保存数据。
否则的话,反复使用游标数据的话,就需要把游标暂时关闭,
然后重新打开,反复读到需要的数据为止,这是非常不合理的逻辑。
这种时候,如果使用集合鼻梁的话,可以优雅地解决该问题。
也就是说,如果将提取的行保存在集合游标变量中,即使游标关闭后,
也可以参照和使用游标变量的值。
集合变量的语法:
集合变量首先声明类型,然后使用该类型声明集合变量。
集合类型有三种:
・组合排列(也称为PL/SQL表、索引附表)
・嵌套表
・可变排列(也称为VARRAY)
虽然有各自的特征和区分使用,但是这里介绍最容易操作的结合排列(也叫PL/SQL表、索引附表)。
在组合数组中,可以自由存储两个键和值,而不限制数量。
键值可以不连续。

首先,宣言分为“类型声明”和“变量声明”两个阶段。
<类型声明>
TYPE 类型 IS TABLE OF 数据类型 INDEXBY 键数据类型;
<声明变量>
变量名称 类型;

键的数据类型是整数或字符串。
键为整数时,指定PLS INTER或BINARY INTERGER。
键为字符串时,指定VACHAR2(n)。(n为大小)
即使键为整数,也可以是不连续的键值。键值是负数也可以是整数。
如果需要,也可以将字符串用作键。

集合数组可以通过指定键自由代入(赋值)。用新键代入的话会追加那个键的申请。如果用已有的键代入,则用该键更新数值。
收藏变量(按键值):=值;

引用时也指定关键字进行引用。
例如
DBMS_OUTPUT.PUT_LINE(收藏变量(按键值));
下面是简单的具体例子:
1 DECLARE
2 TYPE A_TYPE IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
3 A A_TYPE;
4 BEGIN
5 A(10) := ‘ABC’;
6 A(20) := ‘DEF’;
7 A(30) := ‘GHI’;
8 DBMS_OUTPUT.PUT_LINE(A(20));
9 * END;
SQL> /
  PL/SQL过程成功完成。
首先,在定义域的第2行中,值为VARCHAR2(10)型,
键为BINARY INTEGER型的数组,类型名字是A_TYPE。
接下来在第三行中使用A_TYPE类型声明A变量。
接下来从执行部的第5行到第7行,键10,值为“ABC”,
键20,值为“DEF”,键30,值为“DEF”,将值存储在数组A中。
第8行显示键值为20的数组A的值,即“DEF”。

如您所看到的,键值不需要连续的数值。

下面将介绍与游标处理相结合的应用实例。
1 DECLARE
2 CURSOR C1 IS SELECT DEPTNO, DNAME FROM DEPT;
3 REC C1%ROWTYPE;
4 TYPE REC_TAB_TYPE IS TABLE OF C1%ROWTYPE INDEX BY BINARY_INTEGER;
5 REC_TAB REC_TAB_TYPE;
6 I BINARY_INTEGER := 1;
7 BEGIN
8 OPEN C1;
9 LOOP
10 FETCH C1 INTO REC;
11 EXIT WHEN C1%NOTFOUND;
12 DBMS_OUTPUT.PUT_LINE(‘从游标开始’||REC.DNAME);
13 REC_TAB(I) := REC;
14 I := I + 1;
15 END LOOP;
16 CLOSE C1;
17 DBMS_OUTPUT.PUT_LINE(’------------------------------------------------’);
18 FOR I IN 1…REC_TAB.COUNT LOOP
19 DBMS_OUTPUT.PUT_LINE(
‘从集合开始·’||REC TAB(I).DNPAME);
20 END LOOP;
21* END;
SQL> /

从游标开始ONE
从游标开始TWO
从游标开始THTEE
'-----------------------------------------------
从集合开始ONE
从集合开始TWO
从集合开始THTEE

PL/SQL过程成功完成。
SQL>

上面例子的说明如下:
第二行声明显式游标(就是定义过的游标)
第三行声明游标的记录类型变量
第四行声明游标的记录类型集合类型(这样也可以收集记录类型)
第五行声明其类型的集合变量
第六行集合中键的变量声明
第8~15行明示游标逐行相识到画面上,并保存在集合变量中
第16行关闭显式游标
18~20集合变量的内容各自显示到画面上
※第18行TAB.COUNT”表示集合元素的数量。
在上述例子中是3。
因此,FOR I IN 1.RECTAB.COUNT LOOP键I是从1到3循环的意思。
总结:在集合变量中存储显式游标取得的行记录,
并关闭显式游标后,可以再次确认是否使用了这些数据。
在上面的例子中,集合的键使用了从1号开始连续的整数,
但是连续不是必须的。
因此,像部门编号那样,10、20、30等不连续的数值也可以。

这就是集合变量用法。会了么。亲。

扫描二维码关注公众号,回复: 12643565 查看本文章

猜你喜欢

转载自blog.csdn.net/niusr_1980_01/article/details/113998655