我道歉,这可能是一个愚蠢的问题!我创建了一个维护并运行一系列过程/函数的过程。如果在任何过程中发生错误,则会向我发送电子邮件,并且会设置自动刷新参数,其中过程名称失败。单个表包含所有过程(名称为varchar2)以自上而下的顺序运行并具有循环结构。如何跳过使用select语句失败的过程以及获取失败的过程下的所有其他过程?基本上我希望程序从它停止的地方开始,并继续运行所有其他程序的过程。我会感激任何想法,因为我只是在学习。
更新
对于那些困惑的人。我需要一个SELECT语句,它根据where跳过行并抓取第一行下面的所有其他行。下面的基本伪代码......SELECT procedure_name
FROM table_whatever
SKIP ROWS that procedure_status <> 'completed'
AND grab all rows underneath
WHILST keeping rows in proper order
id procedure status
15 table_insert failed
16 table_update In Queue
17 email_completion In Queue
我需要抓住失败的程序以及下面的所有内容。
有什么想法吗?
提前谢谢!
答案 0 :(得分:3)
我会咬,哎呀。根据您上面的数据,假设只有一行的状态为“失败”,并假设程序采用“id”顺序:
SELECT procedure
FROM table_whatever
WHERE id >= (SELECT ID
FROM table_whatever
where status = 'failed')
ORDER by id;
答案 1 :(得分:0)
根据您的最小伪代码,并假设“正确的顺序”是ID,您可以只排除那些已完成的:
SELECT procedure_name
FROM table_whatever
WHERE procedure_status <> 'completed'
ORDER BY id;
如果您明确要查找“失败” - 或者可以使用相同的查询在任何运行之前启动序列 - 您可以使用分析查询和内联视图,因此您只需要查看表一旦:
SELECT procedure_name
FROM (
SELECT id, procedure_name, procedure_status,
MIN(CASE WHEN procedure_status = 'failed' THEN id END) OVER () AS failed_id
FROM table_whatever
)
WHERE id >= COALESCE(failed_id, 0)
ORDER BY id;
对于一个小桌子来说两次击中它可能不是什么大不了的事情,所以Gary_W的子查询方法也可以起作用......