微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我收到错误下标超出限制我如何解决它?

如何解决我收到错误下标超出限制我如何解决它?

我知道这行代码表示 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 开始,而不是 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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。