function中使用select 查找记录,结果为空时报错??

我在function中使用
Select USER, PHONE into vUP, vSP From SERV_USER where SERV_NBR = USERNBR;查找用户和电话,并存入变量中。但是在执行时,如果没有查找到记录,或者返回值为空时,就会出错,并导致Oracle连接失败。
我在使用中
Select count(1) into vCount From SERV_USER where SERV_NBR = USERNBR;
if vCount = 0
then return null;
end if;
Select USER, PHONE into vUP, vSP From SERV_USER where SERV_NBR = USERNBR;
用一个count()函数来判断,但是我觉得这种方法不好,会影响速度。

请问大侠们,有没有更直接一些的方法!
谢谢了!!!
---------------------------------------------------------------

Select USER, PHONE into vUP, vSP From SERV_USER where SERV_NBR = USERNBR;
exception
when no_data_found then
dbms_output.put_line('error');
---------------------------------------------------------------

在程序中进行异常捕捉.
---------------------------------------------------------------

在用 select 時, 會有找不到資料(no_data_found)、找到多筆資料(too_many_rows)或其它(others)等異常產生. 所以對所挑的資料沒有把握的話, 最好用 exception 處理各種有可能出現的異常; 在 function 中,還要注意出現異常時也要 return 值.否則也會錯.

---------------------------------------------------------------

CREATE FUNCTION ...
AS
vUP VARCHAR2(20) := NULL;
vSP VARCHAR2(20) := NULL;
BEGIN
...
--GET USER ,PHONE
BEGIN
SELECT USER, PHONE INTO vUP, vSP
FROM SERV_USER
WHERE SERV_NBR = USERNBR;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('error');
END;

...
return XXX;
EXCEPTION
WHEN OTHERS THEN
...
END;

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus