为什么每次我更改会话以设置新的 NLS_DATE_FORMAT 时,下面的函数不返回新的参数值
FUNCTION get_param(p_parameter IN VARCHAR2)
RETURN VARCHAR2 RESULT_CACHE relies_on(nls_session_parameters) IS
l_value nls_session_parameters.value%TYPE;
BEGIN
dbg('Entered Fn_Get_nls_session_Parameter_frc to cache details for .. ' || p_parameter);
SELECT SYS_CONTEXT('USERENV', p_parameter) INTO l_value FROM dual;
RETURN l_value;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbg('In NDF : Gng to return value as null.. ');
l_value := NULL;
RETURN l_value;
END get_param;
嗯...我想说答案就在问题中!如果你仔细阅读Oracle 文档有关跨会话功能 https://oracle-base.com/articles/11g/cross-session-plsql-function-result-cache-11gr1,然后你就知道了。
跨会话 PL/SQL 函数结果缓存通过保存 SGA 中输入参数的特定组合的函数调用结果,提供了一种提高 PL/SQL 函数性能的简单方法。这些结果可以由任何调用相同函数的会话重用相同的参数.
这正是您在创建函数时使用的:
FUNCTION get_param(p_parameter IN VARCHAR2)
RETURN VARCHAR2
RESULT_CACHE relies_on(nls_session_parameters)
IS
Indeed nls_session_parameters
视图没有变化在您的通话之间!它是一个固定的系统视图。是什么改变了它什么你的用户从中看出。
所以你有解决方案:
- 更简单且效率低下(抱歉):删除
RESULT_CACHE
函数声明中的语句或找到一种在调用之间刷新缓存的方法
-
添加一个将在调用之间更改的参数:
FUNCTION get_param(p_parameter IN VARCHAR2, p_dummy_session_id IN NUMBER)
RETURN VARCHAR2 RESULT_CACHE relies_on(nls_session_parameters) IS
...
(您可能需要实际使用“虚拟”参数执行某些操作才能将其考虑在内)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)