游标迭代以从最后一行获取数据 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)。