2008-09-16 132 views
4

我正在使用OLEDB提供程序連接到Oracle數據庫的ADO.Net。在我的循環,我做一個插入:ORA-00933:SQL命令未正確結束

insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000) 

第一插入成功,但第二個給出了一個錯誤:

ORA-00933: SQL command not properly ended 

我在做什麼錯?

+0

你是否試圖同時做兩個插入? – 2008-09-16 14:10:01

回答

3

對我來說,似乎你錯過了這兩種說法之間的;
insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)
;
insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)
;
嘗試添加;並讓我們知道。

2

第一次插入後的半結腸?

+0

在語句末尾添加一個分號給我這個錯誤: ORA-00911:無效字符 – 2008-09-16 13:34:31

2

Oracle SQL使用分號;作爲語句標記的結尾。

您將需要添加;打擾後插入命令。

注意:這也假定ADODB將允許在一次調用中插入2個插入。

的替代方法可能是包裝在一個塊兩個通話,

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

這是一個很長的鏡頭,但在第一次插入SQL日期格式是有效的英國/美國,第二次插入是無效的,如果Oracle數據庫設置爲英國日期格式,我意識到你已經使用了TO_DATE功能,但我沒有看到其他的東西...

0

是否需要從OLE_DB中分號?大多數API都不需要它?

0

ADO.NET OLE DB提供程序用於通用數據訪問,其中您沒有針對數據庫的特定提供程序。使用OracleConnection等優先於OleDbConnection作爲Oracle數據庫連接。

1

在我的循環中,我沒有重新初始化我的StringBuilder ...因此我發佈了多重插入語句。

無論如何感謝您的幫助!

0

除了分號問題之外,我強烈建議您查看綁定變量。未能使用它們會導致數據庫性能問題。該代碼也趨於更清潔。

10

在.net中,當我們嘗試在末尾執行帶有分號的單個Oracle SQL語句時。結果將是一個oracle錯誤:ora-00911:無效字符。 OK,你的身影,一個SQL語句不需要分號,但如何在一個字符串中執行2的SQL語句,例如:

Dim db As Database = DatabaseFactory.CreateDatabase("db") 
Dim cmd As System.Data.Common.DbCommand 
Dim sql As String = "" 

sql = "DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; " 

cmd = db.GetSqlStringCommand(sql) 
db.ExecuteNonQuery(cmd) 

上面的代碼將會給你同樣的Oracle錯誤:ORA-00911:無效字符。

這個問題的解決辦法是用一個BEGINEND;語法來包裝2條的Oracle SQL語句,例如:

sql = "BEGIN DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; END;" 

禮貌:http://www.lazyasscoder.com/Article.aspx?id=89&title=ora-00911%3A+invalid+character+when+executing+multiple+Oracle+SQL+statements

+2

當您在問題/答案中輸入代碼時,如果將其格式化爲代碼,則它更具可讀性。 「{}」按鈕可以爲你做到這一點,或者你可以手動縮進代碼。您還可以使用反標記來標記句子中的代碼。 – 2011-05-19 12:44:22

3

在Oracle分號 ';'僅在sqlplus中使用。當您使用ODBC/JDBC,OLEDB等時,您不會在語句結尾處放置分號。在上述情況下,您實際上正在執行2個不同的語句,因此處理該問題的最佳方式是使用2個語句,而不是嘗試將其合併成單個語句,因爲您無法使用分號。

0

問題可能是您的參數變量null被插入到查詢中。這就是我的問題所在。一旦我給參數一個空字符串的默認值,它就起作用了。

相關問題