2017-04-05 461 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 ...要求查詢返回只有一行。

你可以添加一個過濾器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 
    AND ROWNUM = 1; 
END myProcedure; 
/

或者你也可以處理該異常:

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; 
/
相關問題