了解 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" 程序。如果您需要这方面的帮助,请告诉我们。