2012-10-15 81 views
0

它可以調用從SELECT語句返回REF遊標的遊標嗎?從sql語句調用函數:返回可變數量的列

編輯 我需要可變數量的返回字段,所以流水線表對我的目的沒有用處。

IE。

SELECT GetFields('field1, field2', flh_tout_name) 
    FROM ENI_FLUSSI_HUB c 
    WHERE flh_id_messaggio = '1' 

FUNCTION GetFields(fields,vFlhToutName); vQuery:= 'SELECT'||字段|| 'FROM' || vFlhToutName;

return EXECUTE IMMEDIATE (vQuery); 

END

回答

1

我不這麼認爲。您可以創建一個可以從select中調用的piplined表函數。看到這裏Looping on values, creating dynamic query and adding to result set

我的回答也看http://psoug.org/reference/pipelined.html

基本上你需要創建一個表示你的結果中的每一行的類型。然後你創建一個表格類型,它是你的行類型的表格。

CREATE TYPE MyRowType AS OBJECT(ID NUMBER, VALUE VARCHAR2(10)); 

CREATE TYPE MyTableType AS TABLE OF MyRowType; 

那麼你的函數應該返回MyTableType:

CREATE FUNCTION TestTableFunctions (lookup_Value VARCHAR2) 
RETURNS MytableType 
AS 
    TYPE r_cursor IS REF CURSOR; 
    query_results r_cursor; 
    results_out MyRowType := MyRowType(NULL, NULL); 
BEGIN 

OPEN query_results FOR 
SELECT 
    ID, 
    Value 
FROM 
    MyTable 
WHERE 
    LookupValue = Lookup_Value; 

LOOP 
    FETCH query_results INTO 
     results_out.ID, 
     results_out.Value; 
    EXIT WHEN query_results%NOTFOUND; 

    PIPE ROW(results_out); 
END LOOP; 

CLOSE query_results; 
END TestTableFunctions; 

那麼你可以撥打:

SELECT * FROM TABLE(TestTableFunctions('abcd')) 
+0

我需要一個變量數返回的字段。 – Revious

+1

@ Gik25 - 一個可變數字或動態列表?因爲您會在開發過程中瞭解所有可能的列,或者可以添加其他列嗎?您使用什麼類型的客戶端來檢索和處理結果? – Tobsey

+0

我使用蟾蜍作爲客戶端。我想從'table'中選擇field1,field2。但是列的名稱從一個開發變爲另一個開發。我可以用很多方式解析動態查詢,並在SELECT子句中使用它。但我必須知道返回類型?我不能讓一個函數返回一個可變數量的列並在SELECT語句中使用它? – Revious