队列监控oracle脚本

问题描述 投票:0回答:1

我正在尝试监视仪表板上的队列。 我希望我的选择即使队列表为空也能返回一些内容,看看我当前的 qry。

SELECT 'QueueName' Q_NAME,
       CASE 
       WHEN COUNT(*) = 0 
       THEN (SELECT 'Nothing to process Queue is empty' FROM DUAL)
       ELSE 'something in the Queue'
       END Q_STATUS,
       CASE
       WHEN MSG_STATE = 'READY' AND MIN(ENQ_TIME) > SYSDATE - 5/(24*60)
       THEN 'OK: processing'
       ELSE 'Nothing to process on Queue'
       END STATUS
FROM   QueueTable
GROUP BY MSG_STATE;
sql oracle
1个回答
0
投票

如果要在表为空时返回一行,则可以使用

UNION ALL
添加另一行(如果为空,则使用默认值),然后按优先级对行进行排序,队列的详细信息具有比默认值更高的优先级,并且仅输出最高优先级的行:

SELECT
FROM   (
  SELECT 'QueueName' AS Q_NAME,
         CASE 
         WHEN COUNT(*) = 0 
         THEN 'Nothing to process Queue is empty'
         ELSE 'something in the Queue'
         END AS Q_STATUS,
         CASE
         WHEN MSG_STATE = 'READY' AND MIN(ENQ_TIME) > SYSDATE - 5/(24*60)
         THEN 'OK: processing'
         ELSE 'Nothing to process on Queue'
         END AS STATUS,
         1 AS priority
  FROM   QueueTable
  GROUP BY MSG_STATE
UNION ALL
  SELECT 'QueueName',
         'Nothing to process Queue is empty',
         'Nothing to process on Queue',
         2
  FROM   DUAL
)
ORDER BY priority
FETCH FIRST ROW WITH TIES;
© www.soinside.com 2019 - 2024. All rights reserved.