【发布时间】:2021-11-28 14:40:20
【问题描述】:
我想在数据模型的脚本中使用游标逻辑,以便根据不同的条件从表中选择一些数据,但我无法从数据模型的查询脚本中执行此操作,我也无法从中调用已经存储的过程db,有没有更好的选择来完成这个
以下是我已经尝试过但出现一些错误的选项:
- 我曾尝试创建过程,然后从数据模型调用它,但无法从数据模型的脚本内部调用过程,我需要将过程的数据反映到数据模型结构中,所以我相信这种情况不是对我有好处。
- 我在 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