在查询中访问会话状态

时间:2016-01-27 22:09:28

标签: sql plsql oracle-apex

我有以下网址

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

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

我想在以下CONTRACTID中访问SQL的值:

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

我已尝试将:CONTRACTID替换为V('CONTRACTID')NV('CONTRACTID'),但这并没有做任何事情

1 个答案:

答案 0 :(得分:1)

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

  • 打开所需的页面(在您的示例中带有查询的页面)
  • 点击Component view部分中的 + 符号(如果您使用的是Items模式)
  • 为您的商品命名
  • 如果您不需要在页面上显示项目,则可以将其隐藏(项目属性中Display as - Hidden

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