如何在Oracle中使用Function / s

时间:2013-05-29 18:43:29

标签: sql oracle

我有架构

它有表格,视图,同义词,程序和功能。

我有一个查询,它是从这个函数中选择的东西,我不知道它是怎么做的。

有人可以帮助我吗

查询非常复杂,但这里是查询的简单版本。 它从View中选择一些东西,从函数中选择一些。

Select 
       d.test1,
       d.test2,
       d.test3,
       d.test4,
       f.test4,
       f.test5
from TABLE(some_FN_currentevents(
      ?orgkey::0?,
      ?assettypekey::0?,
      ?nonflag?::null?,
      ?disflsg?::null?,
      ?devflag?:null?,
      ?wrkflag?:nmull?
)) t
 JOIN some_vw_fact_det d on t.intval = d.test4
 join so_vw_flat_dim f on d.test9 = f.orgkey 
只是fyi
some_FN_currentevents在模式中的函数中 some_vw_fact_det在架构中可见 so_vw_flat_dim也是模式中的视图 我只需要一些关于如何在这里或你自己的例子中使用函数和视图的例子。

2 个答案:

答案 0 :(得分:1)

替换这个:

TABLE(some_FN_currentevents(
      ?orgkey::0?,
      ?assettypekey::0?,
      ?nonflag?::null?,
      ?disflsg?::null?,
      ?devflag?:null?,
      ?wrkflag?:nmull?
)) t

这个

TABLE(select some_FN_currentevents(
      ?orgkey::0?,
      ?assettypekey::0?,
      ?nonflag?::null?,
      ?disflsg?::null?,
      ?devflag?:null?,
      ?wrkflag?:nmull?
) from dual) t
如果你的函数返回一个oracle表类型,如果这个函数没有返回一个类型是不可能的,那么这个修改有效,使得这个查询有效。

答案 1 :(得分:1)

我不完全确定这里的问题是什么,但我会写一些关于如何使函数返回表的内容。

在Oracle中可以编写一个返回PIPELINED的{​​{1}}函数。有几个简单的步骤可以使这项工作:

  1. 创建TABLE数据类型。
  2. 创建一个TABLE函数,返回您创建的表数据类型
  3. 在函数调用PIPELINED内部,向要返回的表中添加行。
  4. PIPE ROW(x);
  5. 形式的SQL语句中调用该函数

    如果您要查找某些文档,请查看Oracle documentation on the subject,然后查看此AskTom page

    如果这不能回答问题,您是否可以编辑问题,使其更清楚您的要求。