在查询中访问会话状态
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 和报表查询中使用它们的名称。应用程序项和页面项之间的主要区别 - 应用程序项可以在整个应用程序中访问,页面项 - 只能在它们的页面上访问。
我有以下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 和报表查询中使用它们的名称。应用程序项和页面项之间的主要区别 - 应用程序项可以在整个应用程序中访问,页面项 - 只能在它们的页面上访问。