Минус значение в базе данных Oracle - PullRequest
0 голосов
/ 08 декабря 2018

Я пробовал следующий запрос (с использованием стандартных представлений каталога - обратите внимание, что один подзапрос использует ссылку dblink):

SELECT (MAX(sequence#)-(SELECT MAX(sequence#) a FROM v$log_history@standby 
WHERE first_time > SYSDATE - 1)) FROM v$log_history where first_time > SYSDATE - 1

Это должно привести к единственному целому числу.Но я получил следующую ошибку: «ORA-00937: не групповая функция для одной группы», хотя подзапрос скалярный, и тогда внешний запрос также должен быть скалярным (выбор max для всех строк).Что не так с моим запросом и как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018
What you are lacking is an aggregate function on the expression 
---> SELECT MAX(sequence#) 
       FROM v$log_history@standby 
      WHERE first_time > SYSDATE - 1

Я бы попытался установить псевдоним для таблицы / представлений также в качестве лучшего способа точной ссылки на запрос.

SELECT MAX(db.sequence#)-MAX (
                              (SELECT MAX(other_db.sequence#) 
                                FROM v$log_history@standby other_db
                                WHERE other_db.first_time > SYSDATE - 1
                              )
                             )
  FROM v$log_history db
 WHERE db.first_time > SYSDATE - 1
0 голосов
/ 08 декабря 2018

Мне кажется, я вижу, что происходит.Oracle не может видеть, что скалярный подзапрос постоянен, и будет жаловаться, что это не группа по столбцу или выражению.

Попробуйте так:

SELECT MAX(sequence#-(SELECT MAX(sequence#) 
                      FROM v$log_history@standby
                      WHERE first_time > SYSDATE - 1))
FROM v$log_history
where first_time > SYSDATE - 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...