oracle-apex - 多个按钮和 LOV 上的 WWV_FLOW_DYNAMIC_EXEC.PARSE_AS_USER 错误
问题描述
将一个非常旧的应用程序升级到 APEX 20.2 后,一切都运行得非常好,除了在调用 WWV_FLOW_DYNAMIC_EXEC.PARSE_AS_USER 时所有按钮和 LOV 都会抛出两个错误之一的几个页面:
Could not validate caller for user "" when parsing
select select 1
from TD_PNART
could not validate env for schema "APEX_PUBLIC_USER":context=, parse_as_schema=,
parse_as_schema_override=,sgid=, curr_flow_sgid=994328456202381, flow_id=220,when parsing
我已经尝试了所有方法,从更新授权方案、在每条 SQL 中搜索可能使架构用户过期的内容、重新创建对象、重新验证 ORDS 等,但每次都会出现错误并且 SQL Trace/APEX Trace 不会提供进一步的信息。我在 Google 或 Oracle Support 上也找不到问题。
如何诊断这样的内部错误?
- error_backtrace: ----- PL/SQL Call Stack -----
object line object
handle number name
0x6d5e0d58 947 package body APEX_200200.WWV_FLOW_ERROR.INTERNAL_GET_ERROR
0x6d5e0d58 1015 package body APEX_200200.WWV_FLOW_ERROR.INTERNAL_ADD_ERROR
0x6d5e0d58 1407 package body APEX_200200.WWV_FLOW_ERROR.RAISE_INTERNAL_ERROR
0x6d5e0d58 1488 package body APEX_200200.WWV_FLOW_ERROR.RAISE_MASKED_INTERNAL_ERROR
0x825ab978 521 package body SYS.WWV_DBMS_SQL_APEX_200200.PARSE_AS_USER
0x73579878 1698 package body APEX_200200.WWV_FLOW_DYNAMIC_EXEC.PARSE_AS_USER
0x73579878 2378 package body APEX_200200.WWV_FLOW_DYNAMIC_EXEC.SELECT_INTO_I
0x73579878 2459 package body APEX_200200.WWV_FLOW_DYNAMIC_EXEC.SELECT_NUM
0x73579878 1263 package body APEX_200200.WWV_FLOW_DYNAMIC_EXEC.DO_ROWS_EXIST
0x8239fac8 290 package body APEX_200200.WWV_FLOW_CONDITIONS.STANDARD_CONDITION
0x851816e0 71 package body APEX_200200.WWV_FLOW_META_UTIL.IS_OK_TO_DISPLAY
解决方案
Oracle 的一位工程师能够解决这个问题,但有一个完全出乎意料的解决方案:
只是为了其他可能遇到同样问题的开发人员的利益。问题是该页面仍然包含“带计算器的文本字段”类型的页面项目,该项目在 APEX 5.0 中已被取消支持。渲染这样一个页面项后,剩余的页面渲染刚刚中断,导致上述错误。我已提交错误 #32828261 以最终删除该项目类型并将现有项目转换为文本字段。
解决方法:
手动将现有页面项目更新为文本字段。
select workspace, application_id, application_name, page_id, page_name, item_name from apex_application_page_items where display_as_code = 'NATIVE_TEXT_WITH_CALCULATOR' order by workspace, application_id, page_id, item_name