PL / SQL选择嵌套数组

时间:2015-03-18 10:59:39

标签: oracle plsql oracle11g oracle-sqldeveloper

我正在尝试从我的表中选择值并将它们存储到一个数组中来操纵它们。这就是我所做的。

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 Developer

中收到此错误
  

限制下标大于varray的数量              或者对于嵌套表而言太大。

所以我想问这是将我的表格值输入学生类型的正确方法吗?任何提示?

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

1 个答案:

答案 0 :(得分:1)

任何更简单的方法都可以:

SELECT name
BULK COLLECT INTO s
FROM   HR.STUDENT;

根本不需要循环。

错误发生的原因(我认为)是您正在尝试访问尚未提供的表的索引和索引。我相信你需要在访问之前手动调用extend,这样就可以使数组的下一个索引可用,例如。

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

我相信你需要有学生:=学生(); - 你似乎错过了一个冒号。