如果 SELECT INTO 语句没有返回至少一行,则抛出 ORA-01403。
对于每个其他 DBMS,我知道这在 SELECT 上是正常的。只有 Oracle 会这样对待 SELECT INTO。
CREATE OR REPLACE PROCEDURE no_data_proc IS
dummy dual.dummy%TYPE;
BEGIN
BEGIN
SELECT dummy
INTO dummy
FROM dual
WHERE dummy = 'Y';
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('Why is this needed?');
END;
END no_data_proc;
为什么?
在我看来,你真的不需要这个例外。开销太大。有时它很方便,但你必须编写一个完整的 BEGIN、EXCEPTION、WHEN、END 块。
有什么我看不到的根本原因吗?