运行时解析 PL/SQL 的 Oracle Apex Cards 视图

Posted

技术标签:

【中文标题】运行时解析 PL/SQL 的 Oracle Apex Cards 视图【英文标题】:Oracle Apex Cards View with PL/SQL Parsed at Runtime 【发布时间】:2015-12-22 11:32:31 【问题描述】:

我正在尝试让卡片报告视图与 Oracle Apex 一起使用,但由于 this SO question 中提到的一个错误,我正在尝试使用在运行时解析的查询。

为查询选择了“使用通用列名(仅在运行时解析查询)”。

不幸的是,卡片视图需要正确的列标题才能工作。这是我的代码:

DECLARE

  l_query VARCHAR2(4000);
  l_app number := v('APP_ID');
  l_session number := v('APP_SESSION');

  --Bug happens on the ':11:' part, page 1 works fine
  l_url VARCHAR2(500) := (APEX_UTIL.PREPARE_URL(
           p_url => 'f?p=' || l_app || ':11:' || l_session || '::NO:::'
  ));
BEGIN
  l_query:= 
    'SELECT 
       post_id,
       user_id as "CARD_SUBTEXT",
       image as "CARD_IMAGE",
       title as "CARD_TITLE",
       ''' || l_url || ''' as "CARD_LINK",
       text as "CARD_TEXT"
     FROM posts';

  IF v('P1_TEXT_SEARCH') IS NOT NULL THEN
    l_query := l_query||' '||'
    WHERE 
    (   
     CONTAINS(title, ''$' || :P10_TEXT_SEARCH || ''') > 0 
    ) OR
    (
     CONTAINS(text, ''$' || :P10_TEXT_SEARCH || ''') > 0
    )
   ';
  END IF; 

  htp.p(l_query);
  RETURN l_query;
END;

如下所示:

有什么想法可以让它发挥作用吗?

【问题讨论】:

为什么要使用通用列名选项? 因为this bug 在这种情况下,您可以复制卡片报告模板,并将新模板中的列引用#CARD_TEXT# 等更改为#COL01# 等? 谢谢,这似乎是正确的方向。但是,我复制了卡片报告模板,然后对其进行了编辑(我无法编辑主模板)。现在它在报告中出现“未找到数据”。也许需要另一个 SO 问题 没关系,快到了!谢谢 【参考方案1】:

正如 Tony Andrews 所指出的,我可以复制和编辑模板以将值设置为 #COL1##COL2# ...

【讨论】:

以上是关于运行时解析 PL/SQL 的 Oracle Apex Cards 视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pl sql 过程从结构仅在运行时知道的 oracle 表中动态获取数据?

Oracle PL/SQL 使用 XMLTABLE 解析 xml 中的嵌套对象

PL/SQL里 execute immediate的用法 谁给解释下

免安装Oracleclient和PL/SQL

Oracle PL/SQL 中的存储过程

PL/SQL: ORA-00942: 表或视图不存在