本次就标号组合(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(键值)⇒从指定的键值来看返回前一个小的键值

本次到此为止。