2012-06-20 119 views
1

如何在不使用curson和類型的情況下從oracle中的函數返回數據集結果。如何從Oracle中的函數返回數據集結果

我的問題是,當我的函數返回結果時,結果以逗號(,)分隔。我想導致表格格式...

我的示例查詢:

 


CREATE OR REPLACE FUNCTION res_set_2(obj_id VARCHAR2) 
    RETURN SYS_REFCURSOR 
AS 
    my_cursor SYS_REFCURSOR; 
BEGIN 
    OPEN my_cursor FOR 
    SELECT t1.*, t2.* FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id WHERE t2.bankingId=obj_id; 
    RETURN my_cursor; 
END; 

建議我最好的解決方案。在提前

感謝。

+0

你打算如何使用這個功能? 'refcursor'有什麼問題? 'type'有什麼問題?爲什麼你不能運行查詢(爲什麼你需要把它包裝在plsql中)? –

+0

@ A.B.Cade問題是結果是用逗號分隔的,我們希望結果是數據集/表格格式。 – Sham

+0

1-當你說'dataset'你的意思是'C#DataSet'? 2-當你說'表格格式'時,xml會做什麼? –

回答

0

你可以得到一個查詢的結果以XML與amlagg

CREATE OR REPLACE FUNCTION res_set_2(obj_id VARCHAR2) 
    RETURN varchar2 AS 
    my_xml varchar2(32767); 
BEGIN 

    SELECT xmlelement("DATASET", xmlagg(
         xmlelement("ROW", xmlforest(t1.col1, t1.col2, ..., t2.col1, ...)) 
            )).getStringVal() 
    INTO my_xml 
    FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id 
    WHERE t2.bankingId=obj_id; 

    RETURN my_xml; 
END; 

注意,我回到VARCHAR2爲簡單起見,我從來沒有試圖讓XMLTYPE在C#

對於一個DataSet,也許this post可以幫助

+0

@amlagg感謝解決方案它工作正常,但有一個問題,my_xml對象的大小限制(32767)。我有導致大小限制錯誤的lacs,所以我應該使用什麼而不是my_xml varchar2(32767)。 – Sham

+0

嘗試使用XMLTYPE(然後刪除'.getStringVal()')或使用clob(然後用'.getClobVal()')替換'.getStringVal()'。我認爲XMLTYPE是更好的方法 –

+0

謝謝老大XMLTYPE工作正常.. – Sham