2012-11-02 239 views
2

下面的語句:ORA-00936缺少表達

INSERT INTO TABLE1(COL_1,COL2) VALUES(SELECT MAX(COL_1) FROM TABLE1), 'XYZ'); 

引發錯誤:

ERROR at line 1: 
ORA-00936: missing expression 
at the select clause. 
1. The table is empty for now. 
2. COL_1 is a primary key intger field. 

你能幫助我嗎?

+1

你有一個小錯誤。但是你的方法不好。如果你在col_1中沒有任何價值,......你不能通過'SELECT MAX(COL_1)FROM TABLE1'得到任何結果......如果你在col_1中有一些值,那麼你總是把最大值(a不變的價值)在第一列..這似乎沒有改變這種方法..你想通過這種方式實現什麼? – Sami

+0

我認爲你正在嘗試做一些像插入max(id)+1 ..你知道自動inrement嗎? – Sami

回答

0

刪除一個額外的支架

INSERT INTO TABLE1(COL_1,COL2) SELECT MAX(COL_1) , 'XYZ' FROM TABLE1 
+2

你說得對,括號的數目必須匹配,但是你選擇了錯誤的解決方案。 – APC

+0

我的部分愚蠢的錯誤,編輯 – Buzz

3

嘗試爲

create table TABLE1 (COL_1 number, COL2 varchar2(5)); 

ALTER TABLE TABLE1 
add CONSTRAINT t_pk PRIMARY KEY (col_1); 

INSERT INTO TABLE1(COL_1,COL2) VALUES((SELECT nvl(MAX(COL_1),0) FROM TABLE1), 'XYZ'); 

INSERT INTO TABLE1(COL_1,COL2) VALUES((SELECT nvl(MAX(COL_1+1),0) FROM TABLE1), 'XYZ'); 

SQL Fiddle Demo

2

如果你想使用一個查詢作爲標量表達式的結果,包圍整個(子)在括號中查詢,如下所示:

INSERT INTO TABLE1(COL_1,COL2) VALUES (
    (SELECT MAX(COL_1) FROM TABLE1), 
    'XYZ' 
); 

在另一方面,你可以簡單地使用different syntax,在這裏:

INSERT INTO TABLE1(COL_1,COL2) 
SELECT MAX(COL_1), 'XYZ' 
FROM TABLE1 
group by 'XYZ'; 
+1

這兩個解決方案有兩個非常不同的結果。第一行插入一行,第二行爲每個記錄ib TABLE1插入一行。 – APC

+0

@APC:這很奇怪,在SQL Server中沒有區別:[INSERT#1](http://sqlfiddle.com/#!3/02f3e/1),[INSERT#2](http://sqlfiddle.com /#!3/02f3e/2)。我的意思是,我永遠不會指望這兩個人在Oracle中有所不同。無論如何,最奇怪的部分是我[甚至不能測試](Oracle)中的第二個(即在SQL小提琴的Oracle中,我沒有任何其他Oracle可用。)它一直告訴我該命令未正確結束。在Oracle中必須有一些我應該瞭解的「INSERT ... SELECT」,這對手冊來說似乎不夠明顯(對我來說)。 –

+0

其實我的評論是錯誤的。沒有GROUP BY子句,第二個解決方案*將不會運行。使用GROUP BY子句,它將返回一行。 – APC