【发布时间】:2019-04-10 14:06:40
【问题描述】:
我有一个发送邮件的程序。我想通过从视图中选择电子邮件地址来发送邮件,并将地址传递给我的邮件程序。
此代码的工作原理是它从我的数据库中输出多个电子邮件地址和事件编号。
create or replace procedure SEND_REMINDER_MAIL as
CURSOR c1 IS
SELECT contact_email
FROM TEST.incidents_view
WHERE updated <= current_timestamp - interval '1' minute
and status_code = '100';
cursor c2 is
SELECT incident_number
FROM TEST.incidents_view WHERE updated <= current_timestamp - interval '1' minute
and status_code = '100';
v_contact_email varchar2(300);
v_incno VARCHAR2(10);
BEGIN
-- Open the cursor and loop through the records
OPEN c1;
FETCH c1 INTO v_contact_email;
EXIT WHEN c1%NOTFOUND;
-- Print values
dbms_output.put_line(v_contact_email);
end loop;
CLOSE c1;
open c2;
LOOP
fetch c2 into v_incno;
EXIT WHEN c2%NOTFOUND;
dbms_output.put_line(v_incno);
end loop;
CLOSE c2;
end;
/
不过,我需要做的只是将电子邮件地址传递到现有的电子邮件程序中,以便向出现在输出生成的列表中的任何人发送电子邮件。
这是程序的下一部分,我使用 dbms_output 测试并验证电子邮件地址是否正确生成并传递到 v_contact_email。现在,当我尝试发送邮件时,只会传入一个地址:
send_mail.send(
ToList=> v_contact_email,
Subject=> 'Ticket closing warning.',
Body=> 'Please note, your ticket '|| v_incno ||' will be subject to automatic closure',
FromEmail=> 'donotreply@test.com.au',
FromHost=> 'emailsrv',
SMTPServer=> 'emailsrv',);
close c1;
close c2;
End;
/
它没有发送到显示正确传递到 v_contact_email 的几封电子邮件。它只发送一封电子邮件,没有其他任何内容。
为什么循环到 v_contact_email 中的多个电子邮件地址不会导致多封电子邮件发出,而不仅仅是一封?
我该如何解决它:
send_mail.send(
ToList=> v_contact_email,
Subject=> 'Ticket closing warning.',
Body=> 'Please note, your ticket '|| v_incno ||' will be subject to automatic closure',
FromEmail=> 'donotreply@test.com.au',
FromHost=> 'emailsrv',
SMTPServer=> 'emailsrv',);
close c1;
close c2;
End;
/
部分代码正确循环整个结果集?而不是在什么都不做之前只获取一个地址并发送一封电子邮件?
【问题讨论】:
标签: oracle loops plsql cursor procedure