使用Oracle XMLType时处理空值

时间:2012-12-13 06:31:00

标签: xml oracle stored-procedures xmltype

我正在使用Oracle的XMLType函数从返回游标的存储过程中获取XML数据。我的SQL看起来像这样:

select 
XMLType(
    package_name.storedProcName('PARAM1', 'PARAM2', 'PARAM3')
) as sresult 
from dual;

如果存储过程返回记录,这很好,我得到了我期望的XML结果。但是,当过程没有返回任何记录时,我收到以下错误:

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 334
ORA-06512: at line 1

最好,我想在这种情况下返回null,空字符串或其他值。当然,我希望每次发生这种情况时都避免引发Oracle异常。我能做些什么来实现这个目标?

澄清:我的问题是,当存储过程返回空游标时,XMLType构造函数会引发异常。如何检测SQ​​L查询中的空光标? (不幸的是,我没有在Oracle方面进行编程的奢侈 - 我正在编写Java客户端。)

2 个答案:

答案 0 :(得分:3)

用于SQL解决方案:

select 
XMLType.createxml(
    package_name.storedProcName('PARAM1', 'PARAM2', 'PARAM3')
) as sresult 
from dual;

应避免构造函数错误。

例如

SQL> select xmltype.createxml(mycur(0)) from dual;

XMLTYPE.CREATEXML(MYCUR(0))
-------------------------------------------------------------------------------


SQL> select xmltype(mycur(0)) from dual;
ERROR:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 334
ORA-06512: at line 1



no rows selected

x
SQL>

答案 1 :(得分:0)

我已经解决了同样的问题处理异常

begin
  xml:=xmltype(cur);
exception when others then 
  dbms_output.put_line(sqlerrm);
  xml:=xmltype('<ROWS></ROWS>');
end;