Intereting Posts
Почему запрос резко замедляется, если в предложении WHERE константа заменяется параметром (с тем же значением)? SQL Count общее количество строк при использовании LIMIT Преобразование даты в формат символов в SQL Группа MySQL по номерам серии Как получить несколько строк из хранимой процедуры с помощью Linq to SQL? Доступ SQL, по-видимому, обрабатывает дату как dd / mm / yyyy? Самый эффективный способ хранения IP-адреса в MySQL T-sql получает минимальное и максимальное значение за каждый день Просмотр переменных в SSIS во время отладки Это медленный запрос? Можно ли улучшить? В MySQL ли повышение производительности SELECT foo при индексировании foo? Отменить последующие команды UNION ALL, если найдено совпадение формула для вычисленного столбца на основе столбца другой таблицы Как подсчитать количество различных элементов в SQL Ссылка не поддерживается функцией группы

ORA-00933: команда SQL неправильно завершена

Я использую OLEDB-провайдера для подключения ADO.Net к базе данных Oracle. В моем цикле я делаю вставку:

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 

Что я делаю не так?

    Мне кажется, что вам не хватает ; между двумя утверждениями:
    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)
    ;
    Попробуйте добавить ; и дайте нам знать.

    В .net, когда мы пытаемся выполнить один оператор Oracle SQL с точкой с запятой в конце. Результатом будет ошибка oracle: ora-00911: недопустимый символ. ОК, вы считаете, что для одного оператора SQL не требуется точка с запятой, но как насчет выполнения двух операторов 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: недопустимый символ.

    Решение этой проблемы состоит в том, чтобы обернуть ваши 2 заявления Oracle SQL с помощью BEGIN и END; синтаксис, например:

     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

    В Oracle – точка с запятой; используется только в sqlplus. Когда вы используете ODBC / JDBC, OLEDB и т. Д., Вы не помещаете полуточку в конце вашего заявления. В приведенном выше случае вы фактически выполняете 2 разных оператора, поэтому лучший способ справиться с этой проблемой – использовать 2 оператора вместо того, чтобы пытаться объединиться в один оператор, поскольку вы не можете использовать полуточку.

    после двоеточия после первой вставки?

    Oracle SQL использует точку с запятой; как его маркер маркера.

    вам нужно будет добавить; после того, как вставьте вставки.

    NB: это также предполагает, что ADODB разрешит 2 вставки за один вызов.

    альтернативой может быть обертывание обоих вызовов в блоке,

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

    В моем цикле я не повторно инициализировал мой StringBuilder … таким образом, я написал несколько операторов insert.

    Спасибо за вашу помощь!

    Это длинный снимок, но в первой вставке формат даты sql действителен для uk / us, вторая вставка недействительна, если Oracle DB настроен для формата даты в Великобритании, я понимаю, что вы использовали функцию TO_DATE, но я не увидеть что-нибудь еще …

    Требуется ли точка с запятой из OLE_DB? Это не нужно для большинства API?

    Поставщик ADO.NET OLE DB предназначен для общего доступа к данным, если у вас нет конкретного поставщика для вашей базы данных. Используйте OracleConnection и др. Для OleDbConnection для подключения к базе данных Oracle.

    В дополнение к проблеме с точкой с запятой я настоятельно рекомендую вам посмотреть на переменные связывания. Неспособность использовать их может привести к проблемам с производительностью базы данных в будущем. Код также имеет тенденцию быть более чистым.