有一些场景下,我们需要在SQL语句没有查询到数据的情况下中止任务的运行,以免发出无用的空消息。例如,每隔5分钟查询一次订单表,如果有新订单则将订单信息发送给指定员工,否则就中止任务。那么在EasySQLMAIL中如何实现这个功能呢?
EasySQLMAIL中为您提供了三种方式来实现“无数据时中止任务”。
方式一:在设置任务附件的SQL语句时选择“如果SQL语句的查询结果为空,则终止任务”选项。当这个SQL语句的查询返回行数为0时,任务将中止:
方式一:选择SQL语句的“如果SQL语句的查询结果为空,则终止任务”选项
方式二:选择任务选项中的“如果任务中的所有附件模板的SQL语句都没有返回数据,则终止任务”选项。如果任务中所有附件的SQL语句查询返回的行数都为0时,任务中止:
方式二:选择任务选项中的“如果任务中的所有附件模板的SQL语句都没有返回数据,则终止任务”选项
方式三:为任务配置一个"SQL命令",并将这个SQL命令设置为任务的“先决条件”。当作为“先决条件”的SQL命令查询返回的行数为0或是不满足指定条件时,任务中止。这种方式通常用来在任务开始前判断任务执行的条件是否满足(例如检查当天的统计数据是否已生成或是判断某项数据是否达到告警阀值)。
方式三:在SQL命令中设置先决条件
需要注意的是,如果SQL命令中使用了SQL的COUNT函数或其它聚合函数,例如:
SELECT COUNT(*) FROM t_daily_rpt WHERE trunc(rpt_date) = trunc(sysdate);
这时数据库总是会返回一行数据,即使符合条件的记录数为0,也会返回一个数据行。这样EasySQLMAIL就会判定为先决条件成立而继续运行任务。因此需要将SQL语句的写法修改为:
SELECT 1 FROM t_daily_rpt WHERE trunc(rpt_date) = trunc(sysdate);
或将“先决条件”的判断条件改为如下这样:
设置先决条件的判断方式
这三种方式的应用场景和判断的范围各不相同,在配置任务时根据您的需要进行选用即可。