PL/SQL中本来是没有数组(Array)这个概念的,但是在编程过程中经常要用到数组,这里我们变通一下,用type跟table,record来实现数组功能。
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_no跟total_amount。
再定义这种类型的数组:
type ticket_array is table of row_type index by binary_integer;
这样就定义了一个ticket数组了,它是一个二维数组,每行有2列数据。