使用 Oracle XMLType 时处理空值

Ste*_*han 2 xml oracle stored-procedures xmltype

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

select 
XMLType(
    package_name.storedProcName('PARAM1', 'PARAM2', 'PARAM3')
) as sresult 
from dual;
Run Code Online (Sandbox Code Playgroud)

在存储过程返回记录的情况下,这工作正常并且我得到了我期望的 XML 结果。但是,当该过程没有返回任何记录时,我收到以下错误:

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 334
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)

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

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

Daz*_*zaL 5

对于 SQL 解决方案:

select 
XMLType.createxml(
    package_name.storedProcName('PARAM1', 'PARAM2', 'PARAM3')
) as sresult 
from dual;
Run Code Online (Sandbox Code Playgroud)

这应该可以避免构造函数错误。

例如

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>
Run Code Online (Sandbox Code Playgroud)