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(); - 你好像少了一个冒号。
我正在尝试从我的 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(); - 你好像少了一个冒号。