PL/SQL中本来是没有数组(Array)这个概念的,但是在编程过程中经常要用到数组,这里我们变通一下,用typetablerecord来实现数组功能。

1.declare
2.  type num_array is table of number index by binary_integer;
3.  v_mynum num_array;
4.begin
5.  for i in
1 .. 10 loop
6.    v_mynum(i) := i;
7.    dbms_output.put_line(v_mynum(i));
8.  end loop;
9.end;

这里我先创建了一个数值型的数组,然后给该数组赋上1-10的初值,再将该数组里的值打印出来验证。下面一行行详解:

2行,用type定义了一个新的类型num_array, 这种类型是什么样的类型呢,是一种数值型的数组——table of number。这样我们就拥有数组类型了,后面只要像普通类型一样使用它就可以了。

3行,定义一个变量v_mynum, 这里它就是一个数值型的数组。看看它的用法是不是与平时 i number; v_str varchar(30);很像呢?

5行,弄个循环,为了给它赋值,当然了,你也可以手动给它赋值,如v_mynum(1) := 200等。

6行,给数组赋值,这里是将i赋给它。

7行,打印该数组的值。

8行,循环结束。

         这里主要是第2行,创建一种数组类型,这里我们创建的是数值型,那么,如果想创建其它类型,又怎么样呢?用法类似,如:

整数数组:type num_array is table of integer index by binary_integer;

字符串数组:type num_array is table of varchar(32) index by binary_integer;

……

还可以是你自己定义的新类型。

如果要创建多维数组,也是这样,首先定义一行中的元素,如:

type row_type is record (serial_no varchar(32), total_amount number);

这就是一行有什么元素,这里有serial_nototal_amount

再定义这种类型的数组:

type ticket_array is table of row_type index by binary_integer;

这样就定义了一个ticket数组了,它是一个二维数组,每行有2列数据。