1

交互式报表 (IR) 最糟糕的方面是您无法使用 PL/SQL 返回 SQL 语句来创建它。我已经使用两种方法解决了这个问题:

1)APEX_COLLECTION.CREATE_COLLECTION在 中Before Header Process,它接受一条 SQL 语句(在过程中用 PL/SQL 构造),并让 IR 的来源为select c001 alias1, c002 alias2 ... from apex_collections a where collection_name = '...'

2)只要你需要,就可以用参数列表制作一个badass管道函数,然后让IR的源成为select * from table(package_name.pipelined_function_name(:P1_parameter1, :P1_Parameter2))

有性能差异吗?我最初使用第一种方法,但后来遇到了一个问题,它给了我一个错误,所以我尝试了流水线函数,发现我只是更喜欢它,并且从那时起就倾向于使用它们,除非这样做不合适(即当有大量的项目要传递给参数)。

4

1 回答 1

0

第一种方法使您有机会通过仅在需要时重新创建集合来缓存数据。使用n00Xd00X列将为您提供报告定义的一些额外性能和正确的列类型。您还可以使用类型转换和列别名创建基于该集合的视图,以增加更多便利:

create or replace view apx_my_report
  as
  select n001 id, c001 data, d001 some_date
    from apex_collections
   where collection_name = 'MY_REPORT'
/

在这种情况下,您的报告来源将是这样的:

select id, data, some_date from apx_my_report
/

另一方面,当您需要在每次呈现页面时执行临时查询时,它会导致不可避免地重新创建此类集合,因此由于不需要的事务维护而导致性能下降:撤消、重做等.

所以,这取决于。

于 2013-06-05T17:05:21.763 回答