当前位置: 首页 > 知识库问答 >
问题:

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

龙俊英
2023-03-14

我正在PL/SQL上练习集合,现在我编写了一个简单的WHILE循环,以便在屏幕上打印稀疏关联数组的值。我收到以下错误:Oracle错误-06502:PL/SQL:数值或值错误:NULL索引表键值。结果打印在屏幕上,但html" target="_blank">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;

Informe de error-ORA-06502:PL/SQL:数值或值error:NULL索引表键值ORA-06512:在第48行065 02。00000-“PL/SQL:数值或值错误%s”*原因:出现算术、数值、字符串、转换或约束错误。例如,如果尝试将值NULL赋给声明为NOT NULL的变量,或者尝试将大于99的整数赋给声明为NUMBER(2)的变量,则会发生此错误。*操作:更改数据、操作方式或声明方式,以使值不违反约束。

Kone Yapi Yapo Drogba Kone Dindane Toure Eboue

共有1个答案

左翰海
2023-03-14

您的while循环条件不正确。

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

循环的最后一个时间v_counter为NULL,因此计算v_costademarfil_2006(NULL)。这导致打印所有名称后出现错误。

 类似资料:
  • 这段代码是为一个基本的杂货计算器的按钮。当我按下按钮时,一个输入对话框显示您在哪里输入您的商品价格。我遇到的问题是,我不知道如何获得循环,使输入对话框在输入后弹出。 我希望它总是回来,除非用户选择ok与nothing或cancel,在这种情况下,循环应该中断并填充剩余的框。使用当前的代码,我必须每次手动按下按钮来恢复对话框。我一直在玩不同的while条件和if语句,但我似乎无法让它发挥作用。我是一

  • 问题内容: 我知道该怎么做,以及它如何与while循环配合使用,但是while循环代码是否相同,无论do是否存在? 问题答案: 考虑以下: 和 第二种形式至少执行一次,然后检查!为此,您必须编写一个循环:

  • 我想我的程序跳过了while循环,但我真的不确定到底发生了什么。该函数应该通过找到GCD,然后将分子和分母除以该数字来减少分数。 我得到分子和分母的绝对值,以确保如果分数是负数,我会在最后保持它。如果分子为0,则要求我返回(0,1)。问题是关于while循环。。。似乎它被完全跳过了。有什么建议吗?

  • 问题内容: 以下示例在Node.js书中给出: 解释了while循环为何阻止执行时,作者说: 节点将永远不会执行超时回调,因为事件循环卡在了循环中,而循环在第7行开始了,因此永远不会给它处理超时事件的机会! 但是,作者没有解释为什么这是在事件循环的背景下发生的,还是在幕后真正发生了什么。 有人可以详细说明吗?为什么节点卡住?以及如何在保留控制结构的同时更改上述代码,以使事件循环不会被阻塞,并且代码

  • while循环开始之前的语句没有打印,并且从1开始没有打印循环中的值。相反,它从一个随机的大int开始打印。

  • 我试图询问用户他是打主场还是客场比赛,所以我想设置一个条件,如果他的输入不等于“主场”或“客场”,则打印一条相应的消息,并再次提示他输入。我选择了一个while循环和condition,我已经敲打我的头一个小时,现在试图找到问题,但似乎无法找到它。无论我输入什么,程序都打印出这里是代码: