символ ";" вызывает ошибку в запросе, хочу выполнить запрос со вставкой/удалением нескольких строк |
Здравствуйте, гость ( Вход | Регистрация )
символ ";" вызывает ошибку в запросе, хочу выполнить запрос со вставкой/удалением нескольких строк |
FantasyOr |
12.5.2011, 16:38
Сообщение
#1
|
Студент Группа: Участник Сообщений: 75 Регистрация: 13.8.2010 Пользователь №: 1956 Спасибо сказали: 4 раз(а) Репутация: 0 |
Здравствуйте.
Работаю с oracle, моделью непользуюсь, использую QSqlQuery. есть желание в одном запросе добавлять/удалять несколько строк "insert into ADDRESSEES(ADR_ID, FULL_NAME, PRIORITY_CHANNEL, PRIORITY_FORMAT) values( 10, 'ZOI4', 2, 0); insert into ADDRESSEES(ADR_ID, FULL_NAME, PRIORITY_CHANNEL, PRIORITY_FORMAT) values( 11, 'ZORG', 1, 1); insert into ADDRESSEES(ADR_ID, FULL_NAME, PRIORITY_CHANNEL, PRIORITY_FORMAT) values( 12, 'MOPS', 1, 0);" дабы не беспокоить сервер по пустякам много раз. Этот запрос не выполняется, пишется ошибка "ORA-00911: invalid character Unable to execute statment" проблема точно в ";", ибо когда оставляю 1 insert, без ";" - запрос выполняется, когда дописываю ";" - появляется эта ошибка. Может кто боролся с этой ошибкой? подскажите пожалуйста. //----------------------------------- bind'ы не предлагать, их все равно приходится по одной записи exec'лить (простите меня за мой французский) есть: bool QSqlQuery::execBatch ( BatchExecutionMode mode = ValuesAsRows ) но он как-то странно (нелогично с моей точки зрения) работает. Пример из документации:
The example above inserts four new rows into myTable: 1 Harald 2 Boris 3 Trond 4 NULL т.о. нужно находить данные поколонково, что странно(нелогично с моей точки зрения). у execBatch есть параметр: //-------- QSqlQuery::ValuesAsRows - Updates multiple rows. Treats every entry in a QVariantList as a value for updating the next row. QSqlQuery::ValuesAsColumns - Updates a single row. Treats every entry in a QVariantList as a single value of an array type. //-------- и все бы хорошо, но напрягает вот что: ValuesAsColumns - Updates a single row... и как быть... подскажите пожалуйста. |
|
|
RazrFalcon |
12.5.2011, 18:04
Сообщение
#2
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
|
|
|
MoPDoBoPoT |
12.5.2011, 21:29
Сообщение
#3
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
проблема точно в ";", ибо когда оставляю 1 insert, без ";" - запрос выполняется, когда дописываю ";" - появляется эта ошибка. Да, есть такая особенность в Oracle. Не помню точно с чем это связано, по-моему это как раз защита от SQL-инъекций (чтобы нельзя было за один раз выполнять больше одного оператора). Если не устраивает решение с QSqlQuery::execBatch(), то можно это сделать с помощью неименованного блока PL/SQL:
Но, на самом деле, лучше пользоваться биндингом. Сообщение отредактировал MoPDoBoPoT - 12.5.2011, 21:31 |
|
|
FantasyOr |
17.5.2011, 13:54
Сообщение
#4
|
Студент Группа: Участник Сообщений: 75 Регистрация: 13.8.2010 Пользователь №: 1956 Спасибо сказали: 4 раз(а) Репутация: 0 |
помогло
|
|
|
Текстовая версия | Сейчас: 28.11.2024, 21:55 |