【问题标题】: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;
/

【问题讨论】:

    标签: oracle plsql cursor varray


    【解决方案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 个元素。我建议使用功能更多且没有限制的普通嵌套表集合类型。
    猜你喜欢
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多