oracle apex 20.1错误:处理验证时出错

kognpnkq  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(343)

我正在尝试为oracleapex上的应用程序中的页面创建验证。下面是我拥有的pl/sql函数体(返回布尔值):

declare v_equipid integer;
begin
        SELECT count(*) into v_equipid from equipment
        WHERE equipstatus = 'available' and equipID = :P3_EquipID;

    if v_equipid = 1 then
        return true;
    else
        return false;
    end if;
end;

用于检查提交的equipid是否有equipstatus='可用'。我运行应用程序并提交表单后,会出现以下错误:
错误:处理验证时出错。
是否为内部错误:true
是公共运行时错误:false
apex\错误\代码:apex.validation.UNHANDED\错误
ora\ U代码:-6502
ora\u sqlerrm:ora-06502:pl/sql:numeric or value error ora-06512:at“apex\u 200100.wwv\u flow\u validation”,第846行ora-06512:at“apex\u 200100.wwv\u flow\u validation”,第846行
错误\回溯:ora-06512:在“apex\ U 200100.wwv\ U flow\ U validation”行846 ora-06512:在“apex\ U 200100.wwv\ U flow\ U validation”行846 ora-06512:在“apex\ U 200100.wwv\ U flow\ U validation”行1029
我不知道如何解决这个问题,我会感谢你的帮助。提前谢谢!

6uxekuva

6uxekuva1#

数字或数值错误,嗯?
这可能是导致问题的原因:

and equipID = :P3_EquipID;

是什么 equipID 的数据类型?如果它是一个 NUMBER ,试试看

and equipID = to_number(:P3_EquipID);

既然不是这样(如你所说),这会有帮助吗?

declare 
  v_equipid number;
begin
  SELECT count(*) 
    into v_equipid 
    from equipment
    WHERE equipstatus = 'available' 
      and equipID = :P3_EquipID;

  return v_equipid = 1;
end;
kcrjzv8t

kcrjzv8t2#

在apex中开发的关键是调试自己的代码。这需要一点时间来适应。关于如何调试apex应用程序和测试pl/sql代码的研究,web上有大量可用的文档。
您可以通过在sql workshop中运行pl/sql来调试验证。更换您的 RETURN TRUE/FALSE 对账单 dbms_output.put_line('true/false') 为了得到结果。在sql workshop中运行它将为您提供准确的行号。ora-06502通常意味着一个类型为number的变量或列被赋予一个数据类型varchar2的值(或另一个不能转换回数字的数据类型)。
确保在将代码移回apex时再次删除dbms\u输出语句。
您也可以通过使用apexïu debug在apex中调试您的流程,请查看文档以获得功能的完整概述,如下所示:

DECLARE
  v_equipid NUMBER; --integer is deprecated, should not be used
BEGIN
  -- put double quotes around the %0 to make any trailing/leading characters visible.
  apex_debug.info(
      p_message => 'Start of validation,  P3_EQUIPID = "%0"',
      p0        => :P3_EQUIPID);
  SELECT COUNT(*)
    INTO v_equipid
    FROM equipment
   WHERE equipstatus = 'available' AND
         equipid = :P3_EQUIPID;
  apex_debug.info(
      p_message => 'After SELECT INTO,  v_equipid = "%0"',
      p0        => v_equipid);
  IF v_equipid = 1 THEN
    RETURN true;
  ELSE
    RETURN false;
  END IF;
END;

在“开发人员”工具栏中启用“调试”,并调查页面的调试。您在那里输入的消息应该在调试日志中可用。抛出错误后放入代码中的消息将不可见,因为不会执行该代码。

相关问题