2012-06-20 2 views
1

curson 및 유형을 사용하지 않고 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

- 당신이'dataset'을 말할 때'C# DataSet'을 의미합니까? 2-'tabular format'을 말할 때 xml이 할 것인가? –

답변

0

당신은 amlagg와 XML에서 쿼리의 결과를 얻을 수 있습니다 : 나는 편의상 VARCHAR2를 반환

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; 

주, 나는 C#을 데이터 집합에 대해서는

에서 XMLTYPE을 얻을 해본 적이 어쩌면 this post 도울 수 있습니다

+0

@amlagg 해답을 제공해 주셔서 감사합니다.하지만 한 가지 문제는 my_xml 객체의 크기 제한이 (32767)입니다. 크기 제한 오류를주는 lacs 결과가 있으므로 my_xml 대신 varchar2 (32767)를 사용해야합니다. – Sham

+0

XMLTYPE을 사용하고 ('.getStringVal()'을 제거하거나) clob을 사용하고'.getStringVal()'을'.getClobVal()'로 대체하십시오. 나는 XMLTYPE이 더 좋은 방법이라고 생각한다. –

+0

감사 보스 XMLTYPE Works는 훌륭하게 작동한다. – Sham

관련 문제