Oracle Apex 4.2.5,Oracle 12c 数据库问题。我正在处理的 Oracle Apex 应用程序是具有两个解析模式的单个工作区。主要的后台应用程序由一个模式解析的多个工作区组成。
有错误的应用程序由第二个模式解析,由 3 个应用程序(12000、12001、12006)组成,用于面向互联网的页面。一个应用程序包含处理安全、登录和仪表板页面的通用页面,另一个包含产品特定页面。
从仪表板页面导航到产品特定页面将在第一次尝试时显示通用登录页面。登录页面 url 已 FSP_AFTER_LOGIN_URL设置为f?p=APP:PAGE要导航到的页面。成功登录后,ora-1422 exact fetch returns more than requested number of rows错误为 . 打开并检查调试显示 v 函数正在引发错误。
看着wwv_flow_data我可以看到 3 行FSP_AFTER_LOGIN_URL
"FLOW_INSTANCE" "ITEM_ID" "ITEM_FILTER" "SESSION_STATE_STATUS" "FLOW_ID"
11304209855061 -162893176 "N" "I" "FSP_AFTER_LOGIN_URL" "N"
11304209855061 -162893176 "N" "I" "FSP_AFTER_LOGIN_URL" "N"
11304209855061 1456968448934338870 "N" "I" 12000 "FSP_AFTER_LOGIN_URL" "N"
FSP_AFTER_LOGIN_URL是每个应用程序中的一个应用程序项。所有的范围都设置为 APP。会话状态保护已设置,但关闭会产生间歇性结果。
FSP_AFTER_LOGIN_URL 是 Apex 内部使用的应用程序项目。Apex 会自动将此项目添加到每个 Apex 应用程序。
将 FSP_AFTER_LOGIN_URL 中的值设置为目标页面允许开发人员定义一旦用户通过登录页面的身份验证,将其重定向到哪个页面。见https://community.oracle.com/message/10271816?#38;#10269816
v 是 Oracle Apex 提供的函数,用于返回页面当前所在会话的项的值。深埋在 Oracle 代码中的是 SELECT INTO 语句,
SELECT D.ITEM_VALUE_CLOB,
D.ITEM_VALUE_VC2
INTO L_VALUE_CLOB,
L_VALUE_VC2
FROM WWV_FLOW_DATA D,
WWV_FLOW_SESSIONS$ S
WHERE D.FLOW_INSTANCE = S.ID
AND D.FLOW_INSTANCE = NVL(P_SESSION_ID,WWV_FLOW_SECURITY.G_INSTANCE)
AND D.ITEM_ID = C_ITEM_ID -- GET_GLOBAL_ITEM_ID(P_ITEM_NAME)
AND D.ITEM_NAME = P_ITEM_NAME -- FSP_AFTER_LOGIN_URL
AND S.SECURITY_GROUP_ID = WWV_FLOW_SECURITY.G_SECURITY_GROUP_ID;
如果上述数据存在于 WWV_FLOW_DATA 中,则查询将返回多于一行,因为它不考虑 FLOW_ID。
由于这是 Oracle 内部,我无能为力。其他使用该软件的客户没有任何问题。是否存在导致此特定客户出现此问题的 Apex 设置?
什么设置允许创建 item_id=-162893176 和 flow_id=null 的 2 行?他们的目的是什么?如何解决此问题?其他使用该软件的客户没有任何问题。是否存在导致此特定客户出现此问题的 Apex 设置?