PLSQL 中的 WHILE 循环有啥问题?

Posted

技术标签:

【中文标题】PLSQL 中的 WHILE 循环有啥问题?【英文标题】:What is wrong with the WHILE Loop on PLSQL?PLSQL 中的 WHILE 循环有什么问题? 【发布时间】:2017-01-09 02:45:50 【问题描述】:

我正在练习 PL/SQL 上的集合,现在我编写了一个简单的 WHILE 循环来在屏幕上打印稀疏关联数组的值。我收到以下错误:Oracle 错误 -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;

通知错误 - ORA-06502:PL/SQL:数字或值错误:NULL 索引表键值 ORA-06512:在第 48 行 06502. 00000 - “PL/SQL:数字或数值错误%s” *原因:算术、数字、字符串、转换或约束错误 发生了。例如,如果尝试 将值 NULL 分配给声明为 NOT NULL 的变量,或者如果 尝试将大于 99 的整数分配给变量 宣布 NUMBER(2)。 *行动:改变数据,它是如何被操纵的,或者它是如何声明的 值不违反约束。

Kone Yapi Yapo Drogba Kone Dindane Toure Eboue

【问题讨论】:

oracle.com/technetwork/issue-archive/2009/09-sep/… @OldProgrammer 感谢您分享这篇文章。我现在对编码有了新的想法。 【参考方案1】:

您的WHILE 循环条件不正确。

您需要检查v_counter 是否不为空,而不是如果v_costademarfil_2006(v_counter) 不为空。

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

【讨论】:

@Rattlesnake 如果这解决了您的问题,请单击勾选接受此答案。

以上是关于PLSQL 中的 WHILE 循环有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

在VB.NET中do while和while有啥区别?

对于一个遍历字符数组的循环,while(a[i])与for(i=0;a[i];i++)有啥区别??

带有字符串而不是整数的 while 循环

这个while循环有啥问题? [复制]

PLSQL绑定变量和宿主变量有啥区别

“Do While”“Loop”和“While”“Wend”循环。有啥不同?