原文出处:http://blog.sina.com.cn/s/blog_5eae21900100ptbf.html
最近在写PL/SQL中使用Oracle提供的索引表构造了一个二维数组。发现这里还包含了不少平时没有太关注的东西,简单总结一下。
在Oracle中很容易构造数组:
SQL> SET SERVEROUT ON SIZE 100000
SQL> DECLARE
1
2
3
4
5
PL/SQL过程已成功完成。
对于二维数组也是很容易实现的:
SQL> DECLARE
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
PL/SQL过程已成功完成。
Oracle除了数组类型VARRAY之外,还有嵌套表和索引表也都可以实现类似数组的功能,其中索引表的使用更加灵活,方便。
SQL> DECLARE
1
2
3
4
5
PL/SQL过程已成功完成。
使用索引表定义数组,不需要指定数组的上限,数组的大小只与内存限制有关。
而且索引组织表定义是指定的索引项并一定要是数值,举个简单的例子:
SQL> DECLARE
CATA_LOG :37
CTXSYS :37
DBSNMP :21
DMSYS :2
EXFSYS :44
HR :7
IX :15
MDSYS :49
OE :12
OLAPSYS :126
ORDSYS :4
OUTLN :3
PM :2
SCOTT :4
SH :17
SYS :706
SYSMAN :337
SYSTEM :141
TSMSYS :1
WMSYS :40
XDB :11
YANGTK :6
PL/SQL过程已成功完成。
如果构造二维以上的数组,且维度不全是数值,那么就需要注意了:
SQL> DECLARE
DECLARE
*
第1行出现错误:
ORA-06502: PL/SQL:数字或值错误: 字符到数值的转换错误
ORA-06512:在line 9
SQL> DECLARE
DECLARE
*
第1行出现错误:
ORA-06502: PL/SQL:数字或值错误: 字符到数值的转换错误
ORA-06512:在line 10
SQL> DECLARE
PL/SQL过程已成功完成。
从这个例子可以看出,用索引表构造的数组和C语言中的数组是有区别的。