ORA-00907 即使括号平衡也缺少右括号

ORA-00907 Missing right parenthesis even when parenthesis are balanced

我有一个相对简单的 sql 查询,它拒绝在 sql 开发人员上执行,我已经将违规行缩小到这个 -

and (b.date_updated > (sysdate MINUS 2) or a.date_updated > (sysdate MINUS 2))

这是我的 where 子句和其他陈述的一部分。

我多次目视计算括号,它看起来很平衡,我不确定我做错了什么,谁能帮我弄清楚这里出了什么问题。

为了完整起见,这里是 where 子句的样子

where a.customer_id = b.customer_id
and (b.date_updated > (sysdate MINUS 2) or a.date_updated > (sysdate MINUS 2))
and a.c_id = c.c_id 

MINUS 不是合法语法。将每个 MINUS 替换为实际的运算符 -.

and (b.date_updated > (sysdate MINUS 2) or a.date_updated > (sysdate MINUS 2))改为and (b.date_updated > (sysdate - 2) or a.date_updated > (sysdate - 2))

MINUS 是对两个集合进行运算的集合运算符,本质上是 UNIONUNION ALL 所做的 "opposite"。

要从日期(或另一个数字)中减去一个数字,请使用 -

这在 Oracle 手册的 "Arithmetic operators" 章中有记载:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/operators002.htm#SQLRF51156

您将其与 SET 运算符混淆了:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/operators005.htm#SQLRF51164

要了解为什么 current_date - 2 确实如您所愿,请阅读“Datetime/Interval 算术":
https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042