我收到错误下标超出限制。我如何解决它?
Posted
技术标签:
【中文标题】我收到错误下标超出限制。我如何解决它?【英文标题】:I am getting the error Subscript outside of limit. How do I fix it? 【发布时间】:2021-06-22 21:06:34 【问题描述】:我知道是empName(COUNTER) := ENAME;
的代码行,但我似乎无法弄清楚问题所在。
SET SERVEROUTPUT ON;
DECLARE
TYPE nameList IS VARRAY (10) OF VARCHAR2(10);
empName nameList := nameList();
ENAME VARCHAR2(10);
SAL NUMBER(7,2);
COUNTER NUMBER := 0;
CURSOR C1 IS
SELECT ENAME, SAL
FROM EMP
WHERE ROWNUM < 11;
BEGIN
FOR person IN C1
LOOP
ENAME := person.ENAME;
SAL := person.SAL;
empName(COUNTER) := ENAME;
COUNTER := COUNTER + 1;
END LOOP;
END;
/
【问题讨论】:
【参考方案1】:两个错误:
varray 索引从 1 开始,而不是 0(第 6 行) 你忘了扩展它(第 14 行)SQL> DECLARE
2 TYPE nameList IS VARRAY (20) OF VARCHAR2(10);
3 empName nameList := nameList();
4 ENAME VARCHAR2(10);
5 SAL NUMBER(7,2);
6 COUNTER NUMBER := 1; --> not 0 but 1
7 CURSOR C1 IS SELECT ENAME, SAL
8 FROM EMP
9 WHERE ROWNUM < 11;
10
11 BEGIN
12 FOR person IN C1
13 LOOP
14 empName.extend; --> you're missing this
15 ENAME := person.ENAME;
16 SAL := person.SAL;
17 empName(COUNTER) := ENAME;
18 COUNTER := COUNTER + 1;
19 END LOOP;
20 END;
21 /
PL/SQL procedure successfully completed.
SQL>
【讨论】:
我假设 extend 使 varray 更大。那是错的吗?很好奇,所以我了解它是如何实现的。 是的,extend 使 varray 更大。它开始是空的。VARRAY(20)
表示限制为 20 个元素。我建议使用功能更多且没有限制的普通嵌套表集合类型。以上是关于我收到错误下标超出限制。我如何解决它?的主要内容,如果未能解决你的问题,请参考以下文章
如何在路径中获取最后一个文件夹时解决运行时错误9,下标超出范围