Нужны предложения со следующим запросом - PullRequest
1 голос
/ 14 декабря 2011

Мне нужны предложения со следующим запросом.

SQL> select value from v$dataguard_stats where name like 'apply lag';

VALUE
----------------------------------------------------------------
+00 00:21:38

, где +00 -> увеличивается до 1, если задержка превышает 24 часа.Моя цель - написать скрипт, который отправляет почту, когда задержка превышает 5 часов, т.е. когда значение больше +00 05:00:00.Тип данных для значения varchar2 (64).Мне нужно переписать запрос таким образом, чтобы запрос отображал выходные данные только тогда, когда значение больше или равно +00 05:00:00.Я не знаю, как сравнить это значение.Любая помощь / предложения приветствуются.

Пожалуйста, найдите описание представления v $ dataguard_stats.

SQL> desc v$dataguard_stats;
 Name                                                                                      Null?    Type
 ----------------------------------------------------------------------------------------- -------- ------------------------------------------------------------
 NAME                                                                                               VARCHAR2(32)
 VALUE                                                                                              VARCHAR2(64)
 UNIT                                                                                               VARCHAR2(30)
 TIME_COMPUTED                                                                                      VARCHAR2(30)

Спасибо и всего наилучшего

Картик M

1 Ответ

3 голосов
/ 14 декабря 2011

Значение сохраняется как символьное представление значения INTERVAL.Это можно увидеть, посмотрев на столбец UNIT в представлении v $ dataguard_stats:

SQL> SELECT name, value, unit
  2    FROM v$dataguard_stats
  3   WHERE name = 'apply lag';

NAME            VALUE           UNIT
--------------- --------------- ------------------------------
apply lag       +00 00:00:21    day(2) to second(0) interval

SQL>

Это должно приблизить вас к желаемому:

SELECT 1
  FROM v$dataguard_stats
 WHERE name LIKE 'apply lag'
   AND TO_DSINTERVAL(value) > NUMTODSINTERVAL(5,'HOUR');

Возвращает 1, еслиapply_lag больше 5 часов.

...