gpt4 book ai didi

oracle SQL 中的 ( ) 括号

转载 作者:行者123 更新时间:2023-12-02 02:44:45 24 4
gpt4 key购买 nike

我有一个应用程序,它会在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com