理解Cursor For Loop语句

时间:2017-10-26 11:51:33

标签: sql oracle for-loop plsql cursor

我一直在寻找一些如何获得这样的功能的答案。说实话,我发现的信息具有最低限度的理解,这显然超出了我的理解范围,我希望有人可以帮助我理解。

我有一个返回多个连接行的查询:

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;

我尝试编写一个搜索这些结果的循环,选择&#34; TEAM_ID&#34;的结果。并通过电子邮件向相关经理发送串联字符串。

如果有人可以帮我指点我需要直接查看,我确实相信它是一个光标循环,但我不知道如何构建该查询,我一直在阅读一切都在网上好几个小时了。

干杯。

1 个答案:

答案 0 :(得分:3)

我通常更喜欢隐式游标循环,除非需要使用显式游标 - 它们效率高且语法简单。

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开始编写自己的简单&#34; send_email&#34;程序。如果您需要帮助,请告诉我们。