1

将一个非常旧的应用程序升级到 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
4

1 回答 1

1

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
于 2021-04-28T21:08:32.187 回答