2012-10-30 45 views
1

我嘗試使用下面的C#代碼來執行一些SQL:ORA-00933:運行時創建序列時,SQL命令無法正常結束命令

IDbCommand objOracleCommand = CreateCommand(commandPart, connection, transaction); 
objOracleCommand.ExecuteNonQuery(); 

我取回一個「ORA-00933:SQL命令未正確結束「錯誤。

commandPart是一個字符串,它看起來像:

CREATE SEQUENCE seq_1 
INCREMENT BY 1 
START WITH 1 
NOMAXVALUE 
NOMINVALUE 
NOCACHE 
NOCYCLE 
NOORDER 

CREATE SEQUENCE seq_2 START WITH 1 INCREMENT BY 1 

的commandPart實際上正在從一個文本文件中讀取。原來的SQL有分號像這樣:

CREATE SEQUENCE seq_1 
INCREMENT BY 1 
START WITH 1 
NOMAXVALUE 
NOMINVALUE 
NOCACHE 
NOCYCLE 
NOORDER; 

CREATE SEQUENCE seq_2 START WITH 1 INCREMENT BY 1; 

這個原始的片斷(用分號)將運行在SQL Developer中就好了。如果我通過C#運行原始代碼段,則會得到「ora-00911:無效字符」。有任何想法嗎?

感謝, 埃裏克

+2

嘗試在NOORDER後放一個分號。如果這不能解決它,請嘗試分離兩個語句,並一次執行一個語句。 –

回答

2

你的命令部分包括兩個命令。甲骨文很困惑,因爲它只是期望一個命令。

您需要分別執行(ExecuteNonQuery)這兩個命令。

+0

嗨, 我把一個;最後我得到一個ORA-00933:SQL命令沒有正確結束。 我把一個;在兩次查詢之間,我得到一個ora-00911:無效的字符錯誤。 我正在解析一個300,000行的sql文件,該文件使用我公司的元數據創建一個空白數據庫。如果我將它分割爲分號,它會一直運行,直到我得到具有大量語句的函數創建語句,並以分號分隔。 如果我繼續沿着這條路線走下去,看起來我基本上會寫完我自己的SQL解析器。我很難相信Oracle不能在sql命令中處理多個sql語句。 -Eric – Eric

+0

爲了您的目的,最好使用SQL * plus。它會正確地分割和執行命令,包括PL/SQL塊,存儲過程等。如果你自己分割,規則是以分號拆分,除非遇到DECLARE或BEGIN;那麼你將不得不在另一條線上的下一個斜線(/)處分割。 (Oracle有三種語言:SQL,PL/SQL和SQL * plus,斜槓只是SQL * plus的一部分。) – Codo