oracle SQL 中的 ( ) 括号

标签 oracle

我有一个应用程序,它会在 WHERE 条件后自动添加括号并将其发送到 JDBC Oracle 驱动程序,Oracle 不喜欢它并抛出:ORA-00907:缺少右括号

我不确定如何在 Oracle 语法范围内使用它,但是有什么建议可以修复它并使其具有此括号,或者语法不支持它吗?

原始查询工作得很好:

SELECT count(*) as ErrorCount, Engine_name, to_char(log_time,'hh24') as Hour FROM eailog_data.err_log WHERE err_timestamp > sysdate-1/24 GROUP BY engine_name, to_char(log_time,'hh24') HAVING count(*) > 100 AND count(*) > 0 ORDER BY count(*)

第 3 方应用程序对其进行如下修改(注意在 WHERE 条件后添加括号):

SELECT count(*) as ErrorCount, Engine_name, to_char(log_time,'hh24') as Hour 
  FROM eailog_data.err_log 
 WHERE 
       ( 
         err_timestamp > sysdate-1/24 
         GROUP BY engine_name,  
                  to_char(log_time,'hh24') 
          HAVING count(*) > 100 
       ) 
    AND count(*) > 0 
 ORDER BY count(*)

有什么想法可以通过添加括号来修复 SQL 吗?

最佳答案

WHERE 子句括号表达式需要在 WHERE 子句末尾结束,并且 HAVING 子句中的条件以括号结束,但从未开始。

就添加括号而言,当然可以在 WHERE 子句的末尾添加一个括号,并在 HAVING 子句的开头添加一个括号,如下所示:

SELECT count(*) AS errorcount,
  engine_name,
  to_char(log_time,'hh24') AS HOUR
FROM eailog_data.err_log
WHERE ( err_timestamp > SYSDATE-1/24 )
GROUP BY engine_name,
  to_char(log_time,'hh24')
HAVING ( count(*) > 100 )
AND count(     *) > 0
ORDER BY count(*)

由于这是一个应用程序,因此听起来您需要与应用程序的作者合作来修复他们的括号用法。

<小时/>

这是使用 DUAL 表的示例

之前,WHEREHAVING 子句中的括号表达式格式错误。

SCOTT@dev> SELECT dummy,
  2    COUNT(*)
  3  FROM dual
  4  WHERE (dummy != 'Y'
  5  GROUP BY dummy
  6  HAVING  COUNT( *) = 1)
  7  AND COUNT(     *)  > 0
  8  ORDER BY COUNT(*)
  9  /
WHERE (dummy != 'Y'
             *
ERROR at line 4:
ORA-00907: missing right parenthesis

之后,更正了“WHERE”和“HAVING”子句中的括号表达式。

    SCOTT@dev> --corrected
    SCOTT@dev> SELECT dummy,
      2    COUNT(*)
      3  FROM dual
      4  WHERE (dummy != 'Y')
      5  GROUP BY dummy
      6  HAVING (COUNT( *) = 1)
      7  AND COUNT(     *)  > 0
      8  ORDER BY COUNT(*)
      9  /

D   COUNT(*)
= ==========
X          1

关于oracle SQL 中的 ( ) 括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27826384/

相关文章:

sql - 何时在 Oracle 中限定对象的模式名称

sql-server - 将 SQL Server Apply 查询迁移到 Oracle

sql 查询以查找匹配属性

oracle - IN查询oracle的参数

sql - SQL唯一组合

java - 无法通过 JDBC 连接到虚拟机上的 Oracle 11g : Connection reset

python - 将变量传递给 SQL 查询 Python 时出错

sql - 我是否缺少任何类型的 JOIN?

xml - 如何在 TimesTen 数据库中缓存 XMLTYPE 表?

sql - 为空 vs. 等于空