游标迭代以从最后一行获取数据 PL/SQL

Cursor with iteration to grab data from last row PL/SQL

我有一个测试脚本,正要开始使用。我被一些看似简单的事情困住了。 我想遍历行以从结果集的最后一行获取数据以仅使用它。

procedure e_test_send
is

cursor get_rec is 
    select 
    id,
    email_from,
    email_to,
    email_cc,
    email_subject,
    email_message
    from test_email_tab;

begin
    for rec_ in get_rec loop
    ifsapp.send_email_api.send_html_email(rec_.email_to,rec_.email_from, rec_.email_subject, rec_.email_message);
    end loop;
    
    end e_test_send;

我想做的只是发送一封包含消息的电子邮件,并且只发送给最后一行的人。这是一个样本 table,将在记录中增长。目前我有 2 行数据,如果我执行此过程,它将发送 2 封电子邮件,这不是所需的操作。 我希望这是有道理的。

谢谢

你知道哪一行是最后一行吗?具有 MAX(ID) 值的那个?如果是这样,那么您可以将光标置于直截了当的

SELECT id,
       email_from,
       email_to,
       email_cc,
       email_subject,
       email_message
  FROM test_email_tab
 WHERE id = (SELECT MAX (id) FROM test_email_tab)

因为它扫描相同的 table 两次,它的性能会随着行数越来越多而下降。在那种情况下,考虑

WITH
   temp
   AS
      (SELECT id,
              email_from,
              email_to,
              email_cc,
              email_subject,
              email_message,
              ROW_NUMBER () OVER (ORDER BY id DESC) rn
         FROM test_email_tab)
SELECT t.id,
       t.email_from,
       t.email_to,
       t.email_cc,
       t.email_subject,
       t.email_message
  FROM temp t
 WHERE t.rn = 1

只做一次;按 ID 降序排列行,returns 排名为“最高”的行(即 last)。