oracle - 触发器中的 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;
解决方案
触发代码从“CREATE OR REPLACE..”开始。上面的线是什么?“3.插入...,4....”?您是否将其包含在源代码窗口中?请仅发布确切的代码,以便我们了解问题所在。您的触发器名称长度为 34 个字符。将其更改为少于 30 个字符。这可能是您的问题的原因。
一些技巧可以让您作为 Oracle 开发人员的生活更轻松。
- 不要使用大小写混合的对象名称(除非你有一个非常好的理由:“我已经习惯了,因为它就像语言 xx 中的那样不是一个好的理由)。这是一个语法恐怖场景。而是使用大写仅。对于大写的对象名称,不需要引号。
- 使用 ANSI JOIN 语法与 oracle 语法。它使您的代码更易于阅读,并且由于缺少连接而出错的可能性较小
推荐阅读
- docker - Kubernetes certbot 独立不工作
- javascript - 解决循环依赖/ JS
- xamarin.forms - 如何获取 NavigationService 并从后门方法导航?
- c++ - 只让特定的“Fabric”类构造“Foo”类及其所有子类的实例
- google-container-registry - 将 Google Cloud Build IP 列入白名单以测试数据库连接
- jenkins - 詹金斯@script目录
- javascript - 异步函数停止同步函数
- node.js - 如何在 node.js 中获取 base64 字符串的字节长度?
- javascript - 删除文本时保留 DOM 元素位置
- python - Python如何拆分消息