1

我在 ORACLE 12.1 上运行 APEX 5.1。

我有大约。在同一个数据库上运行的 80 个 APEX 类似应用程序 - 每个应用程序都使用相同的替换字符串 :CLIENT_ID 和自己的值(存储应用程序的代码名称)。:CLIENT_ID 通过“V”函数使用:V('CLIENT_ID') 在所有应用程序中调用数据库上的视图和包的共享框架。

在其中一个应用程序中,其中一个交互式报告突然失败,但未设置 :CLIENT_ID 除外。其他应用程序中的所有其他页面或类似页面都可以正常工作。

  • 令人惊讶的是,如果我从双添加一个自然连接的 1 行,它就可以正常工作了!但只有当它是自然连接并且只有当我选择一个读取其他 APEX 替换变量的函数值时。
  • 如果我通过添加“自然连接(从双重选择 1)”来更改它,它会一直失败。
  • 重新编译使用 :CLIENT_ID 的视图没有帮助。
  • 运行 SQL 形成失败的视图并没有帮助。
  • 对 SQL 的一些更改形成失败的视图帮助(但提供错误的数据,因此不能成为解决方案)
  • DBMS_RESULT_CACHE.FLUSH 没有帮助
  • ALTER SYSTEM FLUSH BUFFER_CACHE 没有帮助
  • ALTER SYSTEM FLUSH SHARED_POOL 没有帮助

谁能给我任何提示(除了弹出数据库)我可以做些什么来调查更多?

4

2 回答 2

2

可能是视图正在调用一个被标记的函数,而deterministic实际上该函数是V('CLIENT_ID')在代码中引用的;使其具有不确定性。

请参阅PL/SQL 函数定义并搜索 DETERMINISTIC,特别注意

不要为其结果取决于会话变量或模式对象的状态的函数指定 DETERMINISTIC

于 2018-03-07T19:26:19.353 回答
1

这是解释计划随时间变化的结果。问题的根本原因如下所述: 当“PARTITION LIST SUBQUERY”在执行计划中时,某些东西(错误?)取消实例化包

于 2018-06-18T10:26:08.147 回答