在查询中访问会话状态

Accessing Session State in query

我有以下URL

.../ords/f?p=1575:31:12296330498768::NO::CONTRACTID:2

如您所见,我已将 CONTRACTID 的会话状态设置为 2

我想在下面的 SQL:

中访问 CONTRACTID 的值
SELECT
  CON_CONTRACT.CONTRACTDATUM AS CONTRACTDATUM,
  CON_CONTRACT.BEGINDATUM    AS BEGINDATUM,
  CON_CONTRACT.EINDDATUM     AS EINDDATUM,
  CON_KLANT.NAAM             AS KLANT,
  CON_VERKOPER.NAAM          AS VERKOPER
FROM CON_CONTRACT, CON_VERKOPER, CON_KLANT
WHERE
  CON_VERKOPER.VERKOPERID = CON_CONTRACT.VERKOPERID AND
  CON_KLANT.KLANTID = CON_CONTRACT.KLANTID AND
  CON_CONTRACT.CONTRACTID = :CONTRACTID

我根据 documentation

使用 :CONTRACTID 引用会话状态

使用上述 SQL 访问报告时出现以下错误

ERR-1002 Unable to find item ID for item "CONTRACTID" in application "1575". Unexpected error, unable to find item name at application or page level.

以及以下Technical Info

is_internal_error: true
apex_error_code: WWV_FLOW.FIND_ITEM_ID_ERR
error_backtrace:
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
0x148b83330       556  package body APEX_040200.WWV_FLOW_ERROR
0x148b83330       607  package body APEX_040200.WWV_FLOW_ERROR
0x148b83330       911  package body APEX_040200.WWV_FLOW_ERROR
0x14b2992c0      2607  package body APEX_040200.WWV_FLOW_META_DATA
0x14c01ff10      3334  package body APEX_040200.WWV_FLOW
0x14c01ff10      4860  package body APEX_040200.WWV_FLOW
0x14c0d60c8       249  procedure APEX_040200.F
0xa04c0228         2  anonymous block

我试过用 V('CONTRACTID')NV('CONTRACTID') 替换 :CONTRACTID 但没有任何作用

CONTRACTID 必须是应用程序项或页面项。您不能只将 URL 中的任何字符串作为标识符传递并在查询中使用它。要创建页面项目:

  • 打开所需页面(在您的示例中包含查询的页面)
  • Items 部分单击 + 符号(如果您在 Component view 模式下工作)
  • 为您的项目命名
  • 如果您不需要在页面上显示项目,您可以将其隐藏(Display as - Hidden 在项目属性中)

要创建一个应用程序项目,请转到 Shared Components -> Application Logic -> Application Items 并在那里创建一个项目。
创建页面项或应用程序项后,您可以在 URL 和报表查询中使用它们的名称。应用程序项和页面项之间的主要区别 - 应用程序项可以在整个应用程序中访问,页面项 - 只能在它们的页面上访问。