我正在尝试调试 pl/sql 上的代码,让我感到困惑的是,编码器没有提到任何索引方法,甚至没有“按 binary_integer 索引”,可以吗,pl 引擎如何索引表,如果是这样?
user1533868
问问题
182 次
1 回答
1
它完全有可能。您所描述的称为嵌套表。使用“索引”,这将成为关联数组(稀疏)表。
对于嵌套表,索引从 1 开始,并且对于其中的每个元素都会递增 1。
例如嵌套表类型:
SQL> declare
2 type mytyp is table of number;
3 v_t mytyp;
4 begin
5 v_t := mytyp (1,2,3,4);
6 dbms_output.put_line(v_t(1));
7 dbms_output.put_line(v_t(4));
8 end;
9 /
1
4
在如何分配它们方面也存在其他差异。嵌套表从 1 开始,并且必须在分配给它们之前进行初始化
例如,这在嵌套表上失败:
SQL> declare
2 type mytyp is table of number;
3 v_t mytyp;
4 begin
5 v_t(1) := 1;
6 end;
7 /
declare
*
ERROR at line 1:
ORA-06531: Reference to uninitialized collection
ORA-06512: at line 5
因为你必须初始化它+扩展它以拥有一个元素:
SQL> declare
2 type mytyp is table of number;
3 v_t mytyp;
4 begin
5 v_t := mytyp();
6 v_t.extend;
7 v_t(1) := 1;
8 end;
9 /
PL/SQL procedure successfully completed.
如果您尝试像在关联数组中随意分配的那样随机分配下标,则它会失败,因为嵌套表不是稀疏填充的:
SQL> declare
2 type mytyp is table of number;
3 v_t mytyp;
4 begin
5 v_t := mytyp();
6 v_t(2) := 1;
7 end;
8 /
declare
*
ERROR at line 1:
ORA-06533: Subscript beyond count
ORA-06512: at line 6
于 2013-04-04T07:16:36.153 回答