参考FSP_AFTER_LOGIN_URL导致ora-01422

时间:2015-11-26 17:37:49

标签: oracle-apex ora-01422

Oracle Apex 4.2.5,Oracle 12c数据库问题。我正在研究的Oracle Apex应用程序是一个带有两个解析模式的工作区。主后台应用程序由一个模式解析的许多工作区组成。

具有错误的应用程序由第二个模式解析,由3个应用程序(12000,12001,12006)组成,用于面向Internet的页面。一个应用程序包含处理安全性,登录和仪表板页面的公共页面,另一个包含产品特定页面。

从仪表板页面导航到产品特定页面将在第一次尝试时显示通用登录页面。登录页面网址FSP_AFTER_LOGIN_URL设置为要导航到的网页的f?p=APP:PAGE。成功登录后,ora-1422 exact fetch returns more than requested number of rows错误是。打开并检查调试显示v函数正在抛出错误。

查看wwv_flow_data我可以看到FSP_AFTER_LOGIN_URL

的3行
"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会自动将此项添加到每个顶点应用程序中。

将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设置?

0 个答案:

没有答案