多选查询

时间:2012-02-24 06:05:34

标签: arrays oracle11g

我想将表中的数据和流水线表函数组合成一个SYS_REFCURSOR。我的流水线表函数返回一个字符串数组

CREATE OR REPLACE FUNCTION function_name
  RETURN string_type
  PIPELINED
IS
BEGIN
  PIPE ROW(pr_package.constant1);
  PIPE ROW(pr_package.constant2);
  RETURN;
END;

我尝试使用标量子查询

编写查询
open cur_TEMP for
  Select AR.*,(select * from table(FUNCTION)) from TABLE1 AR

但是会抛出错误“单行子查询返回多行”。

1 个答案:

答案 0 :(得分:0)

select * 
  from table(FUNCTION)

返回多行,不能在标量子查询中使用它。您可以在流水线表函数的输出和表

之间执行笛卡尔积
OPEN cur_temp
 FOR SELECT ar.*, f.column_value
       FROM table1 ar 
            CROSS JOIN table(function) f;

但是您很少想要生成笛卡尔积。如果表有N行,并且流水线表函数返回M行,那么我发布的查询将返回N * M行,这些行相当快。如果这不是您想要的,请更详细地解释所需的输出。