ORA 00907 缺失右括號問題整理解決

2021-09-08 13:27:29 字數 2800 閱讀 8502

近期在開發過程中使用oracle資料庫,在程式中進行查詢資料時遇到了「ora-00907: 缺失右括號」的問題。可是假設直接把sql語句直接在資料庫或pl/sql中執行時。卻又能夠正常查詢,為了解決問題,折騰了半天。查詢了一些資料,所以就對各種導致出現「缺失右括號」的情況進行了整理總結。

行文例如以下。

在有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

此種情況跟1中描繪的有些相似,首先在in(子查詢)使用方法使用order by 會報錯。其次。子查詢裡用order by,純屬多此一舉,子查詢的目的,僅僅是找出合適的資料。假設須要排序。在外邊排就可以。

示比例如以下:

select * fromtabel_example where id in(select id from table_example where id>500 oder byid desc)

解決方式例如以下:

select * fromtabel_example where id in(select id from table_example where id>500)oder by id desc

示比例如以下:

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

示比例如以下:

create tbalet_example

(id      number(18,0) not null,

desc    varchar(45) not null

解決方式例如以下:

給相應的keyword加上雙引號

create tbalet_example

(id      number(18,0) not null,

「desc」     varchar(45) not null

示比例如以下:

create tabelt_example

id bigint not null primary key,

name varchar not null

解決方式例如以下:

create tabelt_example

id bigint not null primary key,

name varchar(200) not null

主外來鍵型別不全然一致時也會報缺失右括號的錯誤

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

示比例如以下:

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

為了解決問題,我們也能夠用改變傳入的日期引數的格式,來解決,例如以下:

selectto_date(20150101,'yyyy-mm-dd') from dual

假設在建立表時,表欄位名所有是大寫,則不存在此問題

ORA 00907 缺失右括號

好久沒寫sql指令碼建立oracle表,之前也是沒注意,最近寫了乙個建立表語句如下 create table jc task task id number 11 primary key,task code varchar2 255 default null,task type number 1 no...

ora 00907缺失右括號

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

ORA 00907 缺失右括號

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