Oracle数据库中的负值

时间:2018-12-08 13:50:23

标签: sql oracle

我尝试了以下查询(使用标准目录视图-请注意,一个子查询使用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:不是单组组函数”,然后外部查询也应该是标量的(在所有行中选择最大值)。我的查询出了什么问题,该如何解决?

2 个答案:

答案 0 :(得分:0)

我想我知道发生了什么事。 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;

答案 1 :(得分:0)

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