从第0页开始计算IR的总行数

时间:2012-11-22 14:14:14

标签: oracle-apex

我的应用程序(使用Oracle ApEx 4.1)在不同页面上有许多不同的交互式报告。

在每个报告中,我都有分页,但我也被要求提供每个报告,每个报告的页面上显示的总记录总数。

是否有在第0页上执行此功能的方法,或者我是否需要单独计算每个报告的总记录数?

感谢。

=============================

**汤姆 - 在下面发表这个评论时遇到了问题,所以在这里添加了:

嗨,汤姆,正如我之前对你的评论中所提到的,我添加了新的“ p_use_filter ”布尔参数并将其设置为FALSE并且一切正常,所以非常感谢。

现在我确实有另一个查询,不知道这是否仍然是你可能正在处理的事情,但在其中一个IR报告中,在我的where条件下,我正在使用绑定变量但是当我深入研究使用绑定变量STRING传递给另一个报表的报表字段,然后查看后端SQL语句,我收到一个INVALID RELATIONAL OPERATOR错误,因为SQL有一个WHERE条件,如:

WHERE (CUSTOMER_NAME = ABC AIRLINES LTD )

即。它试图在没有单引号的情况下解析SQL ABC AIRLINES LTD

任何想法汤姆。

感谢。

2 个答案:

答案 0 :(得分:1)

我建议检索IR sql,然后执行包含在SELECT COUNT(*) from (...)中的SQL 现在,使用apex 4.2,您将获得可以获取报告sql的apex_ir包,但是在4.2之前您没有这样的包。我为自己制作了一个,我已经将它用于了几件事(例如i've blogged a bit about these)。 我为代码的当前状态道歉,因为它需要一些清理,但它是功能性的并且有很多评论。它将解析所有过滤器并再次将它们转换为sql。它不处理计算或分组。它可能会在电缆的某处留下一些扭结,但这可能取决于你想用它做什么。在这种情况下,它不应该是一个问题。

Git link

基本上,在您的架构中安装软件包,然后使用这样的代码运行它:

DECLARE
   lNullTable  DBMS_SQL.VARCHAR2_TABLE;
   lDebug      VARCHAR2(4000);
   lSql        VARCHAR2(4000);
   lCount      NUMBER;
BEGIN
   lSql := apex_ir_pkg.get_ir_sql
      (
         p_app_id             => :APP_ID,
         p_session_id         => :APP_SESSION,
         p_page_id            => :APP_PAGE_ID,
         p_report_id          => NULL,
         p_app_user           => :APP_USER,
         p_use_session_state  => TRUE,
         p_binds              => lNullTable,
         p_binds_val          => lNullTable,
         p_incl_order_by      => FALSE,
         p_debug              => lDebug,
      );

   lSql := 'SELECT count(*) FROM ('||lSql||')';

   EXECUTE IMMEDIATE lSql INTO lCount;
END;

如果你遇到麻烦但无法弄明白,你可以联系我,我会看到我能做些什么。我知道一些代码检修是必要的,但我还没有完成它。

答案 1 :(得分:0)

您可以在区域的页眉或页脚中使用#TOTAL_ROWS#,但它只会显示初始值。我用它来做经典报道。我不认为它与IR javascript打得很好。这是部分页面刷新。 请参阅:https://forums.oracle.com/forums/thread.jspa?threadID=2239712http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21674/ui_region.htm#CHDBCGJH