首页 > 解决方案 > 触发器中的 For 循环失败

问题描述

我正在尝试循环触发器以为所有批准人 1 的人运行并向他们发送电子邮件。然而,这是失败的。我正在使用 apex sql Workshop,因此无法识别错误。

ORA-24344: success with compilation error
ORA-06512: at "SYS.WWV_DBMS_SQL_APEX_200100", line 581
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1658
ORA-06512: at "SYS.WWV_DBMS_SQL_APEX_200100", line 567
ORA-06512: at "APEX_200100.WWV_FLOW_DYNAMIC_EXEC", line 2127


3. insert  on P_IT_ISSUES 
4. for each row 
5. FOLLOWS P_IT_ISSUES_AIU_EMAIL
6. begin
7. for c1 in

触发代码如下:

CREATE OR REPLACE EDITIONABLE TRIGGER  P_IT_ISSUES_AIU_Notify_1
AFTER 
insert  on P_IT_ISSUES 
for each row 
begin
for c1 in
(select p.person_id ,p.person_name,p.person_email,i.dept_name  from p_it_people p,p_it_departments i 
where p.assigned_dept=i.dept_id and i.dept_id=:new.related_dept_id and p.approver='Approver 1')
  LOOP
             APEX_MAIL.SEND( 
                 p_to => c1.email, 
                 p_from => c1.email, 
                 p_body =>  
                 'You have been assigned a new issue.' ||chr(10)|| 
                 ' The details are as follows ::: ' ||chr(10)|| 
                 chr(10)|| 
                 ' Department:'|| c1.dept_name ||chr(10)|| 
                 ' Summary: '||:new.issue_summary ||chr(10)|| 
                 ' Status: '||:new.status ||chr(10)|| 
                 ' Priority: '||nvl(:new.priority,'-'), 
                  p_subj => 'New Issue '); 
           END LOOP;
end;

标签: oracleplsqltriggersoracle-apex

解决方案


触发代码从“CREATE OR REPLACE..”开始。上面的线是什么?“3.插入...,4....”?您是否将其包含在源代码窗口中?请仅发布确切的代码,以便我们了解问题所在。您的触发器名称长度为 34 个字符。将其更改为少于 30 个字符。这可能是您的问题的原因。

一些技巧可以让您作为 Oracle 开发人员的生活更轻松。

  1. 不要使用大小写混合的对象名称(除非你有一个非常好的理由:“我已经习惯了,因为它就像语言 xx 中的那样不是一个好的理由)。这是一个语法恐怖场景。而是使用大写仅。对于大写的对象名称,不需要引号。
  2. 使用 ANSI JOIN 语法与 oracle 语法。它使您的代码更易于阅读,并且由于缺少连接而出错的可能性较小

推荐阅读