2

我正在使用 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 构造函数会引发异常。如何在我的 SQL 查询中检测到空游标?(不幸的是,我没有在 Oracle 端编程的奢侈——我正在编写一个 Java 客户端。)

4

2 回答 2

4

对于 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>
于 2012-12-13T13:06:49.370 回答
0

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

begin
  xml:=xmltype(cur);
exception when others then 
  dbms_output.put_line(sqlerrm);
  xml:=xmltype('<ROWS></ROWS>');
end;
于 2013-10-30T03:50:17.463 回答