2017-04-05 4 views
-2

oracle 저장 프로 시저에서 CLOB 데이터 유형 (XML 데이터)의 출력 매개 변수를 반환하고자합니다.출력으로 CLOB 데이터 형식을 반환하는 방법 Oracle 저장 프로 시저의 매개 변수?

내 절차는이를 컴파일하고 난 실행하려고 할 때, 그것은 나에게 다음과 같은 오류를주고있다이

create or replace PROCEDURE myProcedure 
(
    myParam1 IN NUMBER 
,myParam2 IN NUMBER 
,myParam3 OUT CLOB 
) AS 
    xml_bits CLOB; 
BEGIN 

select xmldataColumn into xml_bits 
from myTable WHERE id = myParam1 AND SESSION_ID = myParam2; 

    IMPCPM_XML := xml_bits; 
END myProcedure; 

나는 것 같습니다.

exact fetch returns more than requested number of rows 

큰 xmldata를 출력 매개 변수로 반환하려면 어떻게해야합니까?

미리 감사드립니다.

+2

그 오류는 OUT 매개 변수를 통해 CLOB 값을 반환 관련이 없습니다. 그것은 단순히 SELECT 쿼리가 두 개 이상의 행을 반환했다고 말합니다. 'SELECT ... INTO ... FROM'을 사용하기 위해서, 질의는 정확하게 하나의 행을 반환해야한다. 그렇지 않으면 예외가 발생한다. –

답변

1

오류는 CLOB 값을 반환하는 것과 아무런 관련이 없습니다. 쿼리는 하나의 행을 반환해야합니다

select xmldataColumn into xml_bits 
from myTable WHERE id = myParam1 AND SESSION_ID = myParam2; 

반환 한 행보다 더 SELECT ... INTO ...을 사용 : 그것은 쿼리이다.

create or replace PROCEDURE myProcedure 
(
    myParam1 IN NUMBER 
,myParam2 IN NUMBER 
,myParam3 OUT CLOB 
) AS xml_bits CLOB; 
BEGIN 
    select xmldataColumn 
    into xml_bits 
    from myTable 
    WHERE id = myParam1 
    AND SESSION_ID = myParam2 
    AND ROWNUM = 1; 
END myProcedure; 
/

을 또는 당신은 예외를 처리 할 수있는 :

당신은 ROWNUM = 1에 대한 필터를 추가 할 수

create or replace PROCEDURE myProcedure 
(
    myParam1 IN NUMBER 
,myParam2 IN NUMBER 
,myParam3 OUT CLOB 
) AS xml_bits CLOB; 
BEGIN 
    select xmldataColumn 
    into xml_bits 
    from myTable 
    WHERE id = myParam1 
    AND SESSION_ID = myParam2; 
EXCEPTION 
    WHEN TOO_MANY_ROWS THEN 
    xml_bits := NULL; 
END myProcedure; 
/