2017-04-05 457 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; 
/
相关问题