【问题标题】:PL/SQL select into a nested arrayPL/SQL 选择嵌套数组
【发布时间】:2015-03-18 10:59:38
【问题描述】:

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

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 中得到了这个错误

限制下标大于可变数组的计数 或者对于嵌套表来说太大了。

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

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

【问题讨论】:

  • 你是如何处理结果的,一旦你得到它们,你将如何处理它们?最好在单个 sql 语句中完成所有操作,而不是循环遍历数组,然后一次更新/插入每一行。

标签: oracle plsql oracle11g oracle-sqldeveloper


【解决方案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;

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

【讨论】:

  • 好东西。此后,我用替代解决方案更新了我的答案,并解释了您收到错误的原因。
猜你喜欢
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多