2015-09-28 63 views
1

我有一個相對簡單的SQL查詢其拒絕上的SQLDeveloper執行右括號,我有問題的行範圍縮小到這一點 -ORA-00907缺少即使括號平衡

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 
+3

'MINUS'應該是'-' –

+0

你如何範圍縮小到這條線?如果您註釋掉該行,錯誤是否會消失? – RBarryYoung

+0

是的,沒有這一行查詢執行得很好,但我需要選擇一個時間表。 – nikhil

回答

5

MINUS是兩套運行一組操作,基本上什麼UNIONUNION ALL做的「對立」。

要減去一個日期號碼(或其他號碼)使用-

這章中介紹「算術運算符」甲骨文手冊:
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實際上並期待你我什麼噸至,請閱讀章節,「日期時間/區間算術」:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042

2

MINUS是不合法的語法。將每個MINUS替換爲實際運營商-

+0

我發現這個http://docs.oracle.com/cd/B10501_01/text.920/a96518/cqspcl.htm這就是爲什麼我改變我的查詢使用MINUS,有沒有關於何時使用什麼的指導? – nikhil

+0

'MINUS' _is_一個有效的操作符 - 僅用於減去數字。 –

+1

@nikhil:您鏈接的手冊記錄了一個長期過時的Oracle版本的全文搜索(注意頂部的「* Oracle Text Reference *」)。它不是**,而是從數值中減去一個數字。 –

2

變化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))