[轉]ORA-00907: 缺失右括弧

來源:互聯網
上載者:User

標籤:

轉至:http://www.cnblogs.com/Olive116/p/5149680.html

ORA-00907: 缺失右括弧前言

        最近在開發過程中使用oracle資料庫,在程式中進行查詢資料時遇到了“ORA-00907: 缺失右括弧”的問題,但是如果直接把sql語句直接在資料庫或PL/SQL中執行時,卻又能夠正常查詢,為瞭解決這個問題,折騰了半天,尋找了一些資料,所以就對各種導致出現“缺失右括弧”的情況進行了整理總結。行文如下。

1 union all中order by 導致缺失右括弧

在有union all的子查詢中使用了order by,會導致缺失右括弧的錯誤,事實上在有union all的子查詢中根本沒必要進行排序,因為聯合之後又組成了一個新的集合,之前的排序對新集合而言沒什麼用,直接查詢聯合之後的新集合然後再進行排序即可。

樣本如下:

select * from

 (

select COLUMN_A,COLUMN_B

from TABLE_EXAMPLE_A

order by COLUMN_A

  union all

select COLUMN_A,COLUMN_B

from TABLE_EXAMPLE_B

order by COLUMN_A

) A;

解決方案如下:

select * from

 (

select COLUMN_A,COLUMN_B

from TABLE_EXAMPLE_A

  union all

select COLUMN_A,COLUMN_B

from TABLE_EXAMPLE_B

) A;

order by COLUMN_A

 

2. in (子查詢)的用法中,子查詢不能使用order by!

此種情況跟1中描繪的有些類似,首先在in(子查詢)用法使用order by 會報錯,其次,子查詢裡用order by,純屬多此一舉,子查詢的目的,只是找出合適的資料。如果需要排序,在外邊排即可。

樣本如下:

Select * from TABEL_EXAMPLE where ID in(select ID from TABLE_EXAMPLE where ID>500 oder by ID DESC)

解決方案如下:

Select * from TABEL_EXAMPLE where ID in(select ID from TABLE_EXAMPLE where ID>500)oder by ID DESC

3. 建立表時,提示缺失又括弧3.1 建立表時關鍵字順序錯

樣本如下:

CREATE TABLE T_EXAMPLE ( 
 id serial primary key, 
 t_id int not null default 0

 )

 解決方案如下:

CREATE TABLE T_EXAMPLE ( 
 id serial primary key, 
 t_id int default 0 not null

 )

3.2 建立表時表中欄位有關鍵字

樣本如下:

CREATE TBALE T_EXAMPLE
(
  id       number(18,0) not null, 
  desc     varchar(45) not null

)

解決方案如下:

給對應的關鍵字加上雙引號

CREATE TBALE T_EXAMPLE
(
  id       number(18,0) not null, 
  “desc”     varchar(45) not null

)

3.3 建立表時未對錶中的欄位設定長度

樣本如下:

CREATE TABEL T_EXAMPLE

(

id bigint NOT NULL PRIMARY KEY,
name varchar NOT NULL

)

解決方案如下:

CREATE TABEL T_EXAMPLE

(

id bigint NOT NULL PRIMARY KEY,
name varchar(200) NOT NULL

)

3.4 建立主外鍵約束時外鍵類型跟主鍵類型不完全一致

主外鍵類型不完全一致時也會報缺失右括弧的錯誤

4. SQL查詢時發生缺失右括弧錯誤

在查詢時引發缺失右括弧錯誤的原因大多數在於查詢語句中有關於日期的轉化、過濾。很多時候都是因為關於日期類型的轉化少了單引號。

樣本如下:

SELECT * FROM T_EXAMPLE Where T_DATE in(2015-01-20 22:37)

解決方案如下:

SELECT * FROM T_EXAMPLE Where T_DATE in(‘2015-01-20 22:37‘)

還有一種情況就是在where過濾中進行時間的轉化時,有時候在sql/plus中直接執行沒問題,但是在程式中卻會出現錯誤。

樣本如下:

SELECT * FROM T_EXAMPLE Where 

ID in(select ID From T_EXAMPLE_B where D_DATE>=TO_DATE(‘2015-01-20’,’yyyy-mm-dd’))

該語句在資料庫直接執行是沒問題的,但是在程式中執行傳入日期參數時有時會報缺失右括弧的錯誤,為瞭解決這個問題,我們可以改變傳入的日期參數的格式,如下:

SELECT * FROM T_EXAMPLE Where 

ID in(select ID From T_EXAMPLE_B where D_DATE>=TO_DATE(20150120,’yyyy-mm-dd’))

還有一種關於oracle日期格式的錯誤是:ORA-01840: 輸入值對於日期格式不夠長

樣本如下:select to_date(2015-01-01,‘yyyy-mm-dd‘) from dual

為瞭解決這個問題,我們也可以用改變傳入的日期參數的格式,來解決,如下:

select to_date(20150101,‘yyyy-mm-dd‘) from dual

5. 其他導致缺失右括弧的原因5.1 書寫錯誤,確實缺少了一個括弧5.2 欄位名缺少雙引號

如果在建立表時,表欄位名全部是大寫,則不存在此問題

[轉]ORA-00907: 缺失右括弧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.