Oracle 触发器无法在 if 子句中包含逻辑
Oracle trigger unable to include logic in if clause
我需要以下触发器的帮助。它可能写得不好,但希望能得到一些帮助,在逻辑和语法上更正它。
因此,如果 APP_USER 是审批人 1(可能超过 1)选择 approve_This=Y,那么邮件应该发送给审批人 2 的 app_users。
我很困惑如何才能在逻辑上正确地编写这段代码。
CREATE OR REPLACE TRIGGER ISSUE_NOTIFY
BEFORE
begin
If upper(v_username)=upper(:APP_USER) and v_approver='Approver 1' and v_approve_This='Y'
THEN
--满足以上条件则设置approve_This='N'并发送如下邮件给审批人2--
您的查询和 "if" 条件中似乎有几处冗余。此外,APP_USER 是一个 APEX 应用程序对象,而不是实际的绑定值。要从 PL/SQL 中引用其 value/content,请使用如下内容:
begin
-- make sure this query only ever returns a single row
select nvl(i.approve_this,'N')
into v_approve_this
from p_it_departments i,
p_it_people p
where i.dept_id=p.assigned_dept
and i.dept_id=:new.related_dept_id
and upper(p.username) = upper(NVL(v('APP_USER'),USER)) ;
if v_approve_this='Y'
then
...
EXCEPTION 子句只能出现在 BEGIN/END 构造中以隔离事务。我不确定是否有办法按照您尝试的方式将其嵌入嵌套查询中。也许像下面这样(不保证):
declare
cursor c1 is ... [your query]
begin
if ...
then
open c1;
loop
fetch c1 into v_person_id,v_email,v_Dept_name;
exit when c1%notfound;
apex_mail.send (...);
end loop;
close c1;
end if;
exception
when no_data_found then
-- set APPROVED as N anyway
:new.approve_this='N';
end;
我需要以下触发器的帮助。它可能写得不好,但希望能得到一些帮助,在逻辑和语法上更正它。
因此,如果 APP_USER 是审批人 1(可能超过 1)选择 approve_This=Y,那么邮件应该发送给审批人 2 的 app_users。
我很困惑如何才能在逻辑上正确地编写这段代码。
CREATE OR REPLACE TRIGGER ISSUE_NOTIFY
BEFORE
begin
If upper(v_username)=upper(:APP_USER) and v_approver='Approver 1' and v_approve_This='Y'
THEN
--满足以上条件则设置approve_This='N'并发送如下邮件给审批人2--
您的查询和 "if" 条件中似乎有几处冗余。此外,APP_USER 是一个 APEX 应用程序对象,而不是实际的绑定值。要从 PL/SQL 中引用其 value/content,请使用如下内容:
begin
-- make sure this query only ever returns a single row
select nvl(i.approve_this,'N')
into v_approve_this
from p_it_departments i,
p_it_people p
where i.dept_id=p.assigned_dept
and i.dept_id=:new.related_dept_id
and upper(p.username) = upper(NVL(v('APP_USER'),USER)) ;
if v_approve_this='Y'
then
...
EXCEPTION 子句只能出现在 BEGIN/END 构造中以隔离事务。我不确定是否有办法按照您尝试的方式将其嵌入嵌套查询中。也许像下面这样(不保证):
declare
cursor c1 is ... [your query]
begin
if ...
then
open c1;
loop
fetch c1 into v_person_id,v_email,v_Dept_name;
exit when c1%notfound;
apex_mail.send (...);
end loop;
close c1;
end if;
exception
when no_data_found then
-- set APPROVED as N anyway
:new.approve_this='N';
end;