【问题标题】:BI Publisher - Can't implement cursor logic inside data modelBI Publisher - 无法在数据模型中实现游标逻辑
【发布时间】:2021-11-28 14:40:20
【问题描述】:

我想在数据模型的脚本中使用游标逻辑,以便根据不同的条件从表中选择一些数据,但我无法从数据模型的查询脚本中执行此操作,我也无法从中调用已经存储的过程db,有没有更好的选择来完成这个

以下是我已经尝试过但出现一些错误的选项:

  1. 我曾尝试创建过程,然后从数据模型调用它,但无法从数据模型的脚本内部调用过程,我需要将过程的数据反映到数据模型结构中,所以我相信这种情况不是对我有好处。
  2. 我在 Oracle BI Publisher (Oracle Fusion) 中使用了以下解决方案匿名块(过程调用)数据模型:http://oracleappssolutiions.blogspot.com/2020/12/anonymous-blocks-procedural-call-data.html 当我们需要简单的“选择”但不能像这样运行更复杂的逻辑时,它是完美的:
DECLARE
type refcursor is REF CURSOR;
xdo_cursor refcursor;
BEGIN
OPEN :xdo_cursor FOR 
   FOR c IN (select t.* from test t where t.VERSION=2) LOOP
       FOR d in (select c.* from record d where CONNECT_BY_ISLEAF = 0 start with d.id. = c.id connect  by prior d.id = c.id) loop
     select * test
       where id=d.id
     end loop;
   END LOOP; 
END;

当我尝试运行它时,我遇到了类似的错误:

请分享您的想法/想法

谢谢

【问题讨论】:

  • 为什么需要使用游标?不能用 union 和 where 子句处理吗?
  • 我从未使用过 OBI,但我在其他报告工具方面有相当多的经验。我认为这里的问题是 OBI 想要一个查询或一个过程。我不是在猜测,但大多数 Oracle 工具都允许您将过程创建为一个编程单元。您始终可以在过程中以 sys_refcursor 的形式创建一个 out 参数,这很可能会“欺骗”OBI 使其认为它是一个常规查询。这是我的猜测,如果你能纠正我,我会删除评论。
  • @EdHayes3 我认为使用游标(用于创建循环逻辑)设置层次结构会更加结构化和简单。

标签: oracle plsql oracle11g bi-publisher


【解决方案1】:
  1. 如果您想使用过程来生成数据,请尝试使用流水线表函数。

https://docs.oracle.com/cd/B19306_01/appdev.102/b14289/dcitblfns.htm

  1. 如果您可以只使用联合和 where 子句过滤器执行 select 语句,那可能是最干净的方法。

  2. 我不确定最终目标是什么,但模板的分组功能可能会对您有所帮助。用户指南中有相当多的文档。在指南中查找for-each-group。它用于获取单个平面系列的行/元素,然后动态创建它们的层次结构。

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多