gpt4 book ai didi

oracle - PL/SQL 找不到数据异常处理

转载 作者:行者123 更新时间:2023-12-04 19:46:21 25 4
gpt4 key购买 nike

我有一个表格 EMAILS,其中的列:ROUTINE、EMAILS 和 COPIES 定义了使用 UTL_MAIL 将特定过程的结果发送给谁(如 to/cc)。

我有以下代码:

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 在 EMAILS 表中没有电子邮件时执行 code1。我的问题是没有引发 NO_EMAIL_FOUND 异常并执行 code2,因为 NO_DATA_FOUND 异常在 SELECT 语句之前引发。如何避免这种情况?

最佳答案

尝试这个:

PROCEDURE myproc AS
NO_EMAIL_FOUND EXCEPTION;
e EMAILS%ROWTYPE;
x NUMBER;
BEGIN

BEGIN
--fetch data
SELECT x INTO x FROM <...>;

--fetch emails
BEGIN
SELECT * INTO e FROM emails WHERE routine='FRS_WEEKLY';
EXCEPTION WHEN NO_DATA_FOUND THEN
RAISE NO_EMAIL_FOUND;
END;
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;

END myproc;

关于oracle - PL/SQL 找不到数据异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42224461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com