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;