我对PL / SQL有点新,并且在使用我创建的游标时遇到了一些麻烦。我正在编写一个向特定人员发送电子邮件的程序。以下是相关代码:
sql stmt := ' -- All my sql is in here -- ';
open email_cursor for sql stmt;
fetch email_cursor into term, award, desc, id, name, xmdt;
.....
if v_id is not null then
email_adr := schema1.get_email_adr(v_id); --This is partly where problem is.
if v_opt_ltr = 'Y' then --a variable that decides if an email should be sent
UTL_MAIL.SEND (sender => email_from,
recipients => email_adr,
subject => v_email_subject,
mime_type => 'text/html',
message => email_body );
END IF;
END IF;
好吧,所以当我运行它时,我没有得到任何错误或任何东西,但由于某种原因,当我运行email_adr变量的函数时它失败了,并没有给我任何东西,反过来不会发送电子邮件。
另一个问题(因为我对游标不熟悉):如果我运行“stu_email:= schema1.get_email_adr(v_id);”行,则游标中的v_id应该有大约25条记录。这会给我所有25条记录,然后“utl_mail.send”会向所有收件人发送电子邮件吗?
答案 0 :(得分:0)
据我了解,你的光标位于get_email_adr
函数内,是吗?虽然这些变量看起来都不像电子邮件地址,所以我有点困惑。
如果是这样,那么一切都取决于get_email_adr
函数中的代码如何工作。每次open
光标时,它都会“重置”它。因此,如果您想要组合所有25条记录,您需要为它们提供一些代码。像这样:
FUNCTION get_email_adr( f_id IN NUMBER ) RETURN VARCHAR2 IS
result VARCHAR2(32000);
CURSOR cur_email ( c_id IN NUMBER ) IS
SELECT email_address FROM some_table WHERE id = c_id;
BEGIN
FOR rec IN cur_email( f_id )
LOOP
IF( result IS NULL )
THEN
result := rec.email_address;
ELSE
result := result || ',' || rec.email_address;
END IF;
END LOOP;
RETURN result;
END get_email_adr;
你回答这个问题或者我完全错过了这个问题吗?