下午好,
我在需要首先檢查查詢的計數是否 = 1 時使用這兩個示例,然后如果 = 1,則從 PL/SQL 塊中的同一個表中提取資料
方法一
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;
方法二
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() 的性能下降。與一個結果相比,我也很少期望拋出該錯誤。
類似的例子,但與我的最終目標不同
讓我知道是否有更多資訊有用。
uj5u.com熱心網友回復:
不要嘗試查詢表兩次,只需查詢表中所需的資料,如果行太多或太少,則捕獲例外:
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;
/
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531645.html
