2013-06-25 31 views
5

,當我進入這個我得到一個錯誤的SQL命令無法正常結束

INSERT INTO works_on 
(essn, pno, hours) 
values 
('123456789', 1, 32.5), 
('123456789', 2, 7.5), 
('666884444', 3, 40.0), 
('453453453', 1, 20.0), 
('453453453', 2, 20.0), 
('333445555', 2, 10.0), 
('333445555', 3, 10.0), 
('333445555', 10, 10.0), 
('333445555', 20, 10.0), 
('999887777', 30, 30.0), 
('999887777', 10, 10.0), 
('987987987', 10, 35.0), 
('987987987', 30, 5.0), 
('987654321', 30, 20.0), 
('987654321', 20, 15.0), 
('888665555', 20, 0); 

我得到下列錯誤

ORA-00933:SQL命令不能正確地結束

+0

這不是你如何在Oracle中進行多行插入,你必須使用他們奇怪的多表插入與雙選擇(呃!)相結合。 – paxdiablo

回答

6

在Oracle中,你不能指定多組值像這樣(我猜你是來自MySQL背景,允許使用該語法)。最簡單的方法是產生多個INSERT報表

INSERT INTO works_on 
(essn, pno, hours) 
values 
('123456789', 1, 32.5); 

INSERT INTO works_on 
(essn, pno, hours) 
values 
('123456789', 2, 7.5); 

INSERT INTO works_on 
(essn, pno, hours) 
values 
('666884444', 3, 40.0); 

... 

你也可以使用一個INSERT ALL聲明

INSERT ALL 
    INTO works_on(essn, pno, hours) values('123456789', 1, 32.5) 
    INTO works_on(essn, pno, hours) values('123456789', 2, 7.5) 
    INTO works_on(essn, pno, hours) values('666884444', 3, 40.0) 
    INTO works_on(essn, pno, hours) values('453453453', 1, 20.0) 
    INTO works_on(essn, pno, hours) values('453453453', 2, 20.0) 
    INTO works_on(essn, pno, hours) values('333445555', 2, 10.0) 
    INTO works_on(essn, pno, hours) values('333445555', 3, 10.0) 
    ... 
SELECT * 
    FROM dual; 
+0

這必須是我以前不知道的「簡單」一詞的一些新定義。但是,+1,因爲你是對的。我應該從DBMS供應商那裏得到更多的信息,它不能分辨NULL和空字符串之間的區別:-) – paxdiablo

+0

該解決方案起作用。正如你所看到的,我是這個東西的小菜鳥,這是我有史以來第一個數據庫類。謝謝。 – UnPatoCuacCuac

+0

什麼是'雙'? – AlwaysLearning

0

儘量採取看看ShoeLace的this

 
Oracle SQL uses a semi-colon ; as its end of statement marker. 

you will need to add the ; after bother insert statments. 

NB: that also assumes ADODB will allow 2 inserts in a single call. 

the alternative might be to wrap both calls in a block, 

    BEGIN 
      insert (...) into (...); 
      insert (...) into (...); 
    END; 
1

你不能像在甲骨文不幸的是單個插入所有的值組合插入多行。您可以分開你的SQL語句,或者使用另一種方法像這樣在一個語句運行:

INSERT INTO works_on (essn, pno, hours) 
SELECT '123456789', 1, 32.5 FROM DUAL UNION 
SELECT '123456789', 2, 7.5 FROM DUAL UNION 
SELECT '666884444', 3, 40.0 FROM DUAL UNION 
SELECT '453453453', 1, 20.0 FROM DUAL UNION 
... 
SELECT '987987987', 30, 5.0 FROM DUAL UNION 
SELECT '987654321', 30, 20.0 FROM DUAL UNION 
SELECT '987654321', 20, 15.0 FROM DUAL UNION 
SELECT '888665555', 20, 0 FROM DUAL 

SQL Fiddle Demo

0

VALUES語法支持將只有一個條目到數據庫中。在ORACLE FAQs,以下建議:

INSERT ALL 
INTO works_on (essn, pno, hours) VALUES ('123456789', 1, 32.5) 
INTO works_on (essn, pno, hours) VALUES ('123456789', 2, 7.5) 
INTO works_on (essn, pno, hours) VALUES ('666884444', 3, 40.0) 
INTO works_on (essn, pno, hours) VALUES ('453453453', 1, 20.0) 
INTO works_on (essn, pno, hours) VALUES ('453453453', 2, 20.0) 
INTO works_on (essn, pno, hours) VALUES ('333445555', 2, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('333445555', 3, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('333445555', 10, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('333445555', 20, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('999887777', 30, 30.0) 
INTO works_on (essn, pno, hours) VALUES ('999887777', 10, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('987987987', 10, 35.0) 
INTO works_on (essn, pno, hours) VALUES ('987987987', 30, 5.0) 
INTO works_on (essn, pno, hours) VALUES ('987654321', 30, 20.0) 
INTO works_on (essn, pno, hours) VALUES ('987654321', 20, 15.0) 
INTO works_on (essn, pno, hours) VALUES ('888665555', 20, 0) 
SELECT * FROM dual; 
-3
INSERT INTO 
WORKS_ON VALUES 
(&ESSN,&PNO,&HOURS); 

後日子會把你得到像下面逸。

ENTER VALUE FOR ESSN: IN THIS U ENTER 123456789 

ENTER VALUE FOR PNO: IN THIS U ENTER 1 

ENTER VALUE FOR HOURS:32.5 

後,你會得到:

1行都創建

然後鍵入'/'符號,然後按回車。你會得到輸入插入另一行到該表中。

按照上面的步驟輕鬆地將行插入表中。

+3

請不要喊。而大寫字母的可讀性較差。嘗試重新格式化,如果可能的話 –

相關問題