-1

我正在尝试调试 pl/sql 上的代码,让我感到困惑的是,编码器没有提到任何索引方法,甚至没有“按 binary_integer 索引”,可以吗,pl 引擎如何索引表,如果是这样?

4

1 回答 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 回答