我有一个表EMAILS与列:例程,电子邮件和副本定义谁应使用UTL_MAIL发送特定过程的结果(至/ cc)。PL/SQL没有发现数据异常处理
我有以下代码:
PROCEDURE myproc AS
NO_EMAIL_FOUND EXCEPTION;
e EMAILS%ROWTYPE;
x NUMBER;
BEGIN
--fetch data
SELECT x INTO x FROM <...>;
--fetch emails
SELECT * INTO e FROM emails WHERE routine='FRS_WEEKLY';
IF e.emails IS NULL AND e.copies IS NULL THEN
RAISE NO_EMAIL_FOUND;
END IF;
<send mail code using UTL_MAIL>;
EXCEPTION
WHEN NO_EMAIL_FOUND THEN <code1>;
WHEN NO_DATA_FOUND THEN <code2>;
WHEN OTHERS THEN NULL; --RAISE;
END myproc;
我想myproc的执行代码1时,有在电子邮件表中没有电子邮件。我的问题是NO_EMAIL_FOUND异常不会引发,因为NO_DATA_FOUND异常在SELECT语句之前被引发,所以执行code2。如何避免这种情况?
Yap,解决方法是将我的SELECT放入内部的BEGIN EXCEPTION END结构中,在内部捕获NO_DATA_FOUND,并将其传播为想要的NO_EMAIL_FOUND,最后抓住它。如果e.emails IS NULL ...则不再需要。谢谢。 – sbrbot