本次就标号组合(PL/SQL表、索引附表)的属性进行说明。
下面介绍使用这些属性,按键值顺序排序并取出值的方法。
请看下面的例子:
SQL> SET SERVEROUTPUT ON
SQL> L
1 DECLARE
2 TYPE A_TYPE IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
3 A A_TYPE;
4 I BINARY_INTEGER;
5 BEGIN
6 A(5):=‘五’;
7 A(-3):=“负三”;
8 A(0):=“零”;
9 A(7):=‘七’;
10 A(-9):=“负九”;
11 I := A.FIRST;
12 LOOP
13 DBMS_OUTPUT.PUT_LINE(A(I));
14 EXIT WHEN I = A.LAST;
15 I := A.NEXT(I);
16 END LOOP;
17 * END;
SQL> /
负九
负三
零
五
七
PL/SQL过程成功完成。
首先,标号数组的声明是第2-3行。
VARCHAR2(20)类型的组合排列,键是整数(BINARY INTERGER型)。
申明变量名A。
在第6-11行的标号数组A中,使用各种键进行赋值。
在第11-16行中,按照键的升序从标号数组取出值,并显示在画面上。
在第11-16行之间使用了标号数组的排列的几种方法,可以进行键的升序处理。
第4行中,声明了变量I。
第11行,在该变量中设置第一个关键字值(最小的键值)。I:=A.FIRST;
此“FIRST”描述返回标号数组中最小的键值。
也就是说,在上述程序中,该键的值是“-9”。
13行:把那个键值对应的标号数组的值取出来显示到画面上。这就是循环里的处理。
那个值是“负九”。这样第一个键的处理结束了。
接下来,需要排序稍微大的键值。那个部分是第15行的记述。
第15行I:=A.NEXT(I);
在本记述中,“.NEXT(I)”的意思是在按键值“I”之后返回较大的键值。
在这里,括号()中的I是“-9”,所以接下来大的键“-3”被左面的I代入。
在该状态下,通过LOOP反复进行相同的处理,结果按按键升序进行画面输出。
注意点是,为了不变成无限循环,需要在适当的时间从循环中退出,但是这是第14行。
第14行 EXIT WHEN I=A.LAST;
这里,“.LAST”与“.FIRST”相反,是返回最大值的方法。
因此,在第13行中那个时刻的键是最大的键时,就从循环中退出(EXIT)。
这样就可以结束重复,而不是无限循环。
另外,如下所示,如果改写方法的话,不是通过按键的升序,而是可以进行“降序处理”。
把FIRST改为LAST
把LAST改为FIRST
把NEXT设为PRIOR
(※PRIOR与NEXT相反,返回前一个小按键值)
总结一下,这次介绍的标号数组排列方法:
使用这些,就可以进行键值的升序或降序处理。
标号数组.FIRST⇒返回最小的键值
标号数组.LAST⇒返回最大的键值
标号数组.NEXT(键值)⇒从指定的键值来看,返回下一个大的键值
标号数组.PRIOR(键值)⇒从指定的键值来看返回前一个小的键值
本次到此为止。