【问题标题】:passing correlated values to a function in Oracle将相关值传递给 Oracle 中的函数
【发布时间】:2019-04-08 09:36:33
【问题描述】:

我有这个功能:

FUNCTION balance_gl_s(p_Date VARCHAR2,   p_Ledgerid NUMBER)

我想在这样的查询中使用一个函数:

select *
from ledgers l
cross apply (select *
            from table(gl_balance_s.balance_gl_s(13970914, l.ledger_fk)))

我用 google 搜索了一下,发现这个语法在 12c 发布后有效,而且我使用的是 11g。 我想做的还有其他解决方案吗?提前谢谢你。

【问题讨论】:

  • 一个日期值作为数字?
  • @WernfriedDomscheit 这是波斯日期,它会在函数中转换为公历日期,但显然这不是重点。
  • @APC 大约是 300 ledger_fk,每个应该返回 1 到 73 条记录。

标签: sql oracle plsql oracle11g


【解决方案1】:

您可以创建另一个函数并在循环中调用第一个函数:

CREATE OR REPLACE FUNCTION balance_gl_s_outer(p_Date VARCHAR2) RETURN your_type

PIPELINED IS
Rec your_type;
cursor cr is
 select l.ledger_fk from ledgers l;

BEGIN

for rr in cr loop

 FOR Rec IN (select *
              from table(gl_balance_s.balance_gl_s(p_Date,
                                                   rr.ledger_fk))) LOOP
  PIPE ROW(Rec);

  END LOOP;
end loop;

end;

【讨论】:

  • 正如 OP 所说,它仅在 12c 发布后可用,但上述功能将提供所需的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2016-06-24
  • 2018-02-14
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多