Oracle Apex 20.1错误:处理验证时出错

2022-03-24 00:00:00 sql oracle oracle-apex

我正在尝试为oracle top上的应用程序中的页面创建验证。下面是我拥有的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=‘Available’。在我运行应用程序并提交表单后,它显示以下错误:

错误:处理验证时出错。

  • IS_INTERNAL_ERROR:TRUE
  • IS_COMMON_RUNTIME_ERROR:FALSE
  • APEX_ERROR_CODE:APEX.VALIDATION.UNHANDLED_ERROR
  • ora_sqlcode:-6502
  • ora_sqlerrm:ORA-06502:PL/SQL:数字或值错误 ORA-06512:AT&Quot;APEX_200100。WWV_FLOW_VALIDATION&QOOT;,第846行 ORA-06512:AT&Quot;APEX_200100。WWV_FLOW_VALIDATION&QOOT;第846行
  • ERROR_BACKTRACE:ORA-06512:at";APEX_200100。WWV_FLOW_VALIDATION";,第846行 ORA-06512:AT&Quot;APEX_200100。WWV_FLOW_VALIDATION&QOOT;,第846行 ORA-06512:AT&QOOT;APEX_200100。WWV_FLOW_VALIDATION&QOOT;,第1029行

我不知道如何解决这个问题,非常感谢您的帮助。提前感谢您!


解决方案

在APEX进行开发的关键是调试您自己的代码。这需要一点时间来适应。关于如何调试您的顶尖应用程序并检测您的pl/sql代码的研究,在Web上有大量的文档可用。

您可以只通过在SQL研讨会中运行pl/sql来调试验证。将RETURN TRUE/FALSE语句替换为dbms_output.put_line('true/false')以获得结果。在SQL研讨会中运行它将给出准确的行号。ORA-06502通常意味着为NUMBER类型的变量或列分配数据类型VARCHAR2的值(或不能转换回NUMBER的其他数据类型)。

请确保在将代码移回顶点时再次删除DBMS_OUTPUT语句。

您还可以使用APEX_DEBUG在APEX中调试您的进程,请查看documentation以获得功能的完整概述,如下所示:

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;
在开发人员工具栏中启用调试,并调查页面的调试。您在其中输入的消息应该在调试日志中可用。引发错误后放入代码中的消息将不可见,因为该代码将不会执行。

相关文章