PL/SQL select 成嵌套数组

PL/SQL select into a nested array

我正在尝试从我的 table 中提取 select 值并将它们存储到一个数组中以进行操作。这就是我所做的。

DECLARE 
   TYPE student IS TABLE OF VARCHAR2(20);
   s student := student();
   n number := 1;

BEGIN
   FOR i IN (SELECT name from HR.STUDENT) loop
   s(n) := i.name;
   n := n + 1;
   end loop;

end;

当我这样做时,我在 SQL 开发人员

中收到此错误

An in-limit subscript was greater than the count of a varray or too large for a nested table.

所以我想问的是,这是将我的 table 值输入学生类型的正确方法吗?有什么提示吗?

我是 PL/SQL 的新手,所以我可能说错了。当我这样做时纠正我。谢谢。

完成此操作的任何更简单的方法是:

SELECT name
BULK COLLECT INTO s
FROM   HR.STUDENT;

完全不需要循环。

发生错误的原因(我认为)是您正在尝试访问 table 的索引,而该 table 尚不可用。我相信您需要在访问之前手动调用扩展,这将使数组的下一个索引可用,例如

FOR i IN (SELECT name from HR.STUDENT)
LOOP 
  s.extend;
  s(n) := i.name;
  n := n+1;
END LOOP;

另外我相信你需要有 s students := students(); - 你好像少了一个冒号。