PLSQL中的WHILE循环有什么问题?

4

我正在练习 PL/SQL 中的集合,现在我已经编写了一个简单的 WHILE 循环来打印稀疏关联数组的值。我收到了以下错误提示:Oracle Error -06502: PL/SQL: numeric or value error: NULL index table key value。结果被打印在屏幕上,但同时也出现了 Oracle 错误。谢谢。

SET SERVEROUTPUT ON

DECLARE

  TYPE type_football_players IS TABLE OF VARCHAR2(45)
       INDEX BY PLS_INTEGER;

  v_costademarfil_2006 type_football_players;

  v_counter PLS_INTEGER;
BEGIN

  v_costademarfil_2006(9)  := 'Kone';
  v_costademarfil_2006(10) := 'Yapi Yapo';
  v_costademarfil_2006(11) := 'Drogba';
  v_costademarfil_2006(14) := 'Kone';
  v_costademarfil_2006(15) := 'Dindane';
  v_costademarfil_2006(19) := 'Toure';
  v_costademarfil_2006(21) := 'Eboue';

  v_counter := v_costademarfil_2006.FIRST;

  WHILE v_costademarfil_2006(v_counter) IS NOT NULL
  LOOP
        DBMS_OUTPUT.PUT_LINE(v_costademarfil_2006(v_counter));

        v_counter := v_costademarfil_2006.NEXT(v_counter);
  END LOOP;
END;

Error report - ORA-06502: PL/SQL: 数字或值错误: 空索引表键值 ORA-06512: 位于第48行 06502. 00000 - "PL/SQL: numeric or value error%s" *原因:出现算术、数字、字符串、转换或约束错误。例如,如果将值NULL赋给已声明为NOT NULL的变量,或者将大于99的整数分配给声明为NUMBER(2)的变量,则会出现此错误。 *操作:更改数据、操作方式或声明方式,以使值不违反约束条件。
Kone Yapi Yapo Drogba Kone Dindane Toure Eboue

1
http://www.oracle.com/technetwork/issue-archive/2009/09-sep/o59plsql-083841.html - OldProgrammer
@OldProgrammer 谢谢分享这篇文章。现在我有了新的编程思路。 - user6611026
1个回答

3

你的WHILE循环条件不正确。

你需要检查v_counter是否为非NULL,而不是检查v_costademarfil_2006(v_counter)是否为非NULL。

在循环的最后一次迭代中,v_counter为NULL,因此会评估v_costademarfil_2006(NULL)。这导致在打印所有名称后出现错误。


@Rattlesnake 如果这个解决了你的问题,请点击勾选以接受此答案。 - WW.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接