Oracle Apex 20.1错误:处理验证时出错
我正在尝试为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;
在开发人员工具栏中启用调试,并调查页面的调试。您在其中输入的消息应该在调试日志中可用。引发错误后放入代码中的消息将不可见,因为该代码将不会执行。
相关文章