我想创建一个过程,选择已分配给任何特定用户的所有记录,然后向每个分配的用户发送一封个性化电子邮件,其中包含分配给他们的记录列表。
如果 myTable 看起来像这样:
ID Assigned
1 Joe
2 Joe
3 Shelly
Joe 的电子邮件将显示一个以行分隔的列表,其中包含记录 1 和 2,而 Shelly 的电子邮件将显示记录 3。
我一开始开始使用游标构建一个过程,但 1) 不确定是否可以在另一个游标中引用游标,2) 不知道游标是否是最佳方法。
我的想法是,游标 1 将获取所有唯一的分配值(Joe、Shelly),而游标 2 将在游标 1 循环内执行,并获取分配给当前游标 1 值的所有记录。
任何在适当方向上的见解或插入将不胜感激。
最佳答案
可以在第一个光标中引用另一个光标:
declare
cursor c1 is
select distinct Assigned from table_name;
cursor c2(p_Assigned in varchar2) is
select id, Assigned from table_name where Assigned = p_Assigned;
begin
for r1 in c1 loop
dbms_output.put_line('------- start mail --------');
for r2 in c2(r1.Assigned) loop
dbms_output.put_line(r2.id || ' ' || r2.Assigned);
end loop;
dbms_output.put_line('------- end mail -------');
end loop;
end;
但是您可以做得更好,具体取决于您的版本。
您可以聚合记录,以便在一个查询中为每个用户获取一条记录,其中有一列包含用换行符
连接的记录:
here有一些方法可以做到这一点。
您还可以使用 xmlagg:
SELECT Assigned, rtrim(XMLAGG(xmlelement(e, id || ' ' || Assigned || chr(13)|| chr(10) )).extract('//text()'))
FROM table_name
GROUP BY Assigned
关于plsql - PL/SQL 在游标中引用另一个游标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982883/