我正在使用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客户端。)
答案 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;