oracle存储过程能输出空值参数吗?
pro*c调存储过程,当某个输出参数为空时,sqlcode返回-1405,但此时存储过程是正常返回的,该输出参数是允许为空的,如何让sqlcode在此情况下正常返回0.
例如下面的存储过程,正常执行时,客户端收到了返回值0,name也取到正确值,可sqlcode却是-1405。
问题出在os_errmsg是空.如果给os_errmsg随便赋一个值就一切ok.例如把程序里面/* os_errmsg :='执行失败'; */语句的注释拿掉就可以了。
oracle不能输出NULL参数吗?还是说客户端需要特别设置?或者存储过程需要修改?因为是从其他数据库移植过来,存储过程很多,有些逻辑比较复杂,如果一处一处检查每个输出在return时是否为null比较麻烦,而且随便赋值也可能给客户端造成麻烦。有什么简单方法处理这个输出空值报错的问题?
create or replace function up_getname (
is_cardid char ,
os_name out char ,
os_errmsg out varchar
)
return number is
begin
if is_cardid is null then
os_errmsg := '入口卡号不能为空';
return (-1);
end if;
begin
select name into os_name from ep_card where cardid = is_cardid;
exception
when others then
begin
os_errmsg :='查询失败';
return(-2);
end;
end;
/* os_errmsg :='执行失败'; */
return(0);
exception
when others then
begin
os_errmsg :='执行失败';
return(SQLCODE);
end;
end up_getname;