2012-02-24 97 views
-1

我想將來自表格和流水線表格函數的數據合併到一個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 

寫的查詢,但拋出一個錯誤「單行子查詢返回多個行」。

+3

帽子鎖,夥計。 – 2012-02-24 06:06:24

+1

STOP SHOUTING,你是我的眼睛! – paxdiablo 2012-02-24 06:11:05

回答

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行,這些行相當快速地變大。如果這不是你想要的,請詳細解釋所需的輸出。

+0

這是比較正確的答案,但它重複了第一個結果表中的行數,返回的函數有多少,如你所說,但我不想要這些重複的行 – user1227771 2012-02-24 06:59:27

+0

@ user1227771 - 那麼你究竟想要什麼?如果流水線表函數返回多行,你如何知道表中哪一行要匹配流水線表函數的哪一行?或者,也許您希望將兩個(或更多)附加列添加到結果集中,對於流水線表函數返回的每一行都有一列?或者是其他東西? – 2012-02-24 15:18:44