了解 Cursor For 循环语句
Understanding Cursor For Loop statements
我一直在寻找一些关于如何使这样的功能正常工作的答案。老实说,我所找到的信息有一个最低限度的理解,显然超出了我的理解范围,我希望有人能帮助我理解。
我有一个查询 returns 多个连接的行:
select
V_FEEDBACK_FORM.TEAM_ID, MANAGER_USER, listagg(REF_NUMBER, '</ br>') within group (order by REF_NUMBER) as "REF_NUMBER"
from
V_FEEDBACK_FORM
left join
(select distinct TEAM_ID, MANAGER_USER from V_AUTH_INFO) "V_AUTH_INFO" on V_FEEDBACK_FORM.TEAM_ID = V_AUTH_INFO.TEAM_ID
where
trunc(UPDATED_ON) < trunc(SYSDATE) - 7
group by
V_FEEDBACK_FORM.TEAM_ID, MANAGER_USER;
我试图编写一个循环来搜索这些结果,选择 "TEAM_ID" 的结果并通过电子邮件将连接的字符串发送给相关经理。
如果有人能帮助我指出我需要查看的直接信息,我相信它是一个 Cursor For Loop,但我只是不明白如何构建该查询,而且我一直在网上阅读所有内容现在几个小时了。
干杯。
我通常更喜欢隐式游标循环,除非需要使用显式游标 - 它们效率高且语法简单。
begin
for r in
(select
V_FEEDBACK_FORM.TEAM_ID, MANAGER_USER,
listagg(REF_NUMBER, '</ br>') within group (order by REF_NUMBER) as "REF_NUMBER"
from V_FEEDBACK_FORM
left join
(select distinct TEAM_ID, MANAGER_USER from V_AUTH_INFO) "V_AUTH_INFO" on V_FEEDBACK_FORM.TEAM_ID = V_AUTH_INFO.TEAM_ID
where trunc(UPDATED_ON) < trunc(SYSDATE) - 7
group by V_FEEDBACK_FORM.TEAM_ID, MANAGER_USER)
)
loop
-- put your code here to send an email for each row
dbms_output.put_line(r.manager_user);
dbms_output.put_line(r.team_id || ' ' || r."REF_NUMBER");
end loop;
end;
/
哦,如果您以前没有发送过电子邮件,我认为人们通常会从 UTL_SMTP 开始并编写他们自己的简单 "send_email" 程序。如果您需要这方面的帮助,请告诉我们。
我一直在寻找一些关于如何使这样的功能正常工作的答案。老实说,我所找到的信息有一个最低限度的理解,显然超出了我的理解范围,我希望有人能帮助我理解。
我有一个查询 returns 多个连接的行:
select
V_FEEDBACK_FORM.TEAM_ID, MANAGER_USER, listagg(REF_NUMBER, '</ br>') within group (order by REF_NUMBER) as "REF_NUMBER"
from
V_FEEDBACK_FORM
left join
(select distinct TEAM_ID, MANAGER_USER from V_AUTH_INFO) "V_AUTH_INFO" on V_FEEDBACK_FORM.TEAM_ID = V_AUTH_INFO.TEAM_ID
where
trunc(UPDATED_ON) < trunc(SYSDATE) - 7
group by
V_FEEDBACK_FORM.TEAM_ID, MANAGER_USER;
我试图编写一个循环来搜索这些结果,选择 "TEAM_ID" 的结果并通过电子邮件将连接的字符串发送给相关经理。
如果有人能帮助我指出我需要查看的直接信息,我相信它是一个 Cursor For Loop,但我只是不明白如何构建该查询,而且我一直在网上阅读所有内容现在几个小时了。
干杯。
我通常更喜欢隐式游标循环,除非需要使用显式游标 - 它们效率高且语法简单。
begin
for r in
(select
V_FEEDBACK_FORM.TEAM_ID, MANAGER_USER,
listagg(REF_NUMBER, '</ br>') within group (order by REF_NUMBER) as "REF_NUMBER"
from V_FEEDBACK_FORM
left join
(select distinct TEAM_ID, MANAGER_USER from V_AUTH_INFO) "V_AUTH_INFO" on V_FEEDBACK_FORM.TEAM_ID = V_AUTH_INFO.TEAM_ID
where trunc(UPDATED_ON) < trunc(SYSDATE) - 7
group by V_FEEDBACK_FORM.TEAM_ID, MANAGER_USER)
)
loop
-- put your code here to send an email for each row
dbms_output.put_line(r.manager_user);
dbms_output.put_line(r.team_id || ' ' || r."REF_NUMBER");
end loop;
end;
/
哦,如果您以前没有发送过电子邮件,我认为人们通常会从 UTL_SMTP 开始并编写他们自己的简单 "send_email" 程序。如果您需要这方面的帮助,请告诉我们。