Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 顶点替换字符串消失_Oracle_Oracle Apex_Oracle12c_String Substitution_Bind Variables - Fatal编程技术网

Oracle 顶点替换字符串消失

Oracle 顶点替换字符串消失,oracle,oracle-apex,oracle12c,string-substitution,bind-variables,Oracle,Oracle Apex,Oracle12c,String Substitution,Bind Variables,我正在ORACLE 12.1上运行APEX 5.1 我有大约80个类似的应用程序在同一个数据库上运行-每个应用程序都使用相同的替换字符串:CLIENT_ID,其自身的值存储应用程序的代码名。 :CLIENT_ID通过V函数使用:V'CLIENT_ID'调用数据库上视图和包的共享框架的所有应用程序 在其中一个应用程序中,有一个交互报告突然失败,但没有设置:CLIENT_ID。其他应用程序中的所有其他页面或类似页面都可以正常工作 令人惊讶的是,如果我从dual添加一行的自然连接,它就可以正常工作了!

我正在ORACLE 12.1上运行APEX 5.1

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

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

令人惊讶的是,如果我从dual添加一行的自然连接,它就可以正常工作了!但只有当它是自然连接,并且只有当我选择一个函数的值读取一些其他顶点替换变量时。 如果我通过添加自然连接来更改它,请从双选择1,它将继续失败。 重新编译使用:CLIENT_ID的视图没有帮助。 运行SQL形成失败的视图没有帮助。 对SQL的某些更改形成了一个失败的视图帮助,但提供了错误的数据,因此不能成为解决方案 DBMS_RESULT_CACHE.FLUSH没有帮助 ALTER SYSTEM FLUSH BUFFER\U缓存没有帮助 ALTER SYSTEM FLUSH SHARED_池没有帮助
除了跳转数据库,有人能给我一些提示吗?我可以做些什么来做更多的调查?

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

查看并搜索确定性,特别注意

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


这是解释计划随时间变化的结果。问题的根本原因如下所述:

谢谢你,马克。是的,我们有确定性函数,每个会话都是稳定的,但每个会话都返回不同的内容,这就是为什么使用确定性而不是结果缓存的原因。。。。是的,从调用V'CLIENT_ID'的函数中删除确定性消除了这个问题。我仍然相信这只是解决问题的一个办法。。。我希望我知道为什么确定性缓存不能像我期望的那样工作。我已经将_query_execution_cache_max_size增加了一倍,但它需要一个反弹才能应用。包变量也会出现同样的问题。共享包有一些变量来存储视图的参数。每个会话都在使用该包,因此有自己的变量版本。直到在随机应用程序中的某个随机位置,这些变量在EXECUTE IMMEDIATE中为空。动态SQL使用使用变量的视图更新表。