PL/SQL检查表然后在检查通过的情况下提取数据的最佳方法



下午好,

当需要首先检查查询计数是否为=1时,我使用这两个示例,然后如果=1,从PL/SQL块中的同一表中提取数据

方法1

DECLARE
v_count number;
v_name varchar2(255);
BEGIN
select count(*) into v_count from THE_USERS where USERID = :IN_ID;
if v_count <> 1 then
raise error;
end if;
select first_name || ' ' || last_name fullname into v_name from THE_USERS where USERID = :IN_ID;
....Other Stuff
END;

方法2

DECLARE
v_count number;
v_name varchar2(255);
BEGIN
select count(*), max(first_name || ' ' || last_name) fullname into v_count, v_name from THE_USERS where USERID = :IN_ID;
if v_count <> 1 then
raise error;
end if;

....Other Stuff
END;

所以我从方法1开始,但#2看起来似乎更好,只是有更少的代码,但我不确定这是否会导致max()的性能打击。与一个结果相比,我也很少期望抛出这个错误。

类似的例子,但最终目标与我不同

如果还有其他有用的信息请告诉我。

不要尝试查询表两次,只需查询表中您想要的数据,并在行过多或过少时捕获异常:

DECLARE
v_name varchar2(255);
BEGIN
select first_name || ' ' || last_name
into   v_name
from   THE_USERS
where  USERID = :IN_ID;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Handle zero rows
NULL;
WHEN TOO_MANY_ROWS THEN
-- Handle more than 1 row.
NULL;
END;
/

小提琴

最新更新