ORA 00911 Ошибка, когда оператор SQL с предложением Где заканчивается точкой с запятой? - PullRequest
1 голос
/ 06 марта 2012

Я получаю ошибку оракула 00911 (недопустимый символ).Я надеюсь, что кто-то может помочь мне понять.

Я использую следующий код для выполнения оператора sql в моей базе данных oracle 11g:

private DataTable ExecuteQuery(DbCommand query) {
    DataTable result = new DataTable();
    using (DbConnection con = CreateConnection()) {
    try {
       query.Connection = con;
       query.CommandTimeout = int.MaxValue; // don't impose a timeout
       using (DbDataAdapter dataAdapter = factory.CreateDataAdapter()) {
           dataAdapter.SelectCommand = query;
           dataAdapter.Fill(result);
       }
    }
    ...

Если я дам что-то этой функции сDbCommand.CommandText свойство типа "Select * from X;" работает нормально, но с учетом "Select * from x where y;" это вызовет исключение оракула 00911.Однако, если я уберу точку с запятой, она будет выполнена нормально.

Кто-нибудь знает, почему он может выдать ошибку недопустимого символа, если завершить оператор точкой с запятой только для операторов некоторых типов?

Обновление для ясности:

Точные запросы, которые я использовал для проверки ошибки, вызвавшей точку с запятой, были:

Этот запрос работал нормально: SELECT * FROM Machines;

Этот запрос сгенерировал ошибку ORA 0911: SELECT * FROM Machines WHERE ID = 47;

Хотя этот запрос работал нормально: SELECT * FROM Machines WHERE ID = 47 <- изменилась только точка с запятой </p>

Также используется поставщик Oracle.DataAccess.Client

1 Ответ

3 голосов
/ 07 марта 2012

Это поведение зависит от используемого поставщика БД - некоторые поставщики выполняют дополнительные запросы заранее (например, SELECT COUNT(*)...) и / или добавляют что-то к запросу (например, ROWID) ... в зависимости от того, как поставщик реализует это "внутреннее поведение" может привести к некоторым странным вещам, когда присутствует точка с запятой ... оно может даже вести себя по-разному в зависимости от того, присутствует WHERE или нет ...

В таких сценариях, как ваш (чистый оператор SELECT / UPDATE / DELETE), я НИКОГДА не добавляю точку с запятой в конце, и у меня никогда не возникало этой проблемы ...

Из любопытства: почему у вас точка с запятой в конце?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...