Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие СУБД > Несколько Insert - запросов


Автор: Poseidon 20.2.2009, 14:22
В программе нужно добавить поле в таблицу запросом. Понятно, Insert - запросом. Полей нужно добавить достаточно много, поэтому решил сделать все одним запросом, а не крутить один запрос в цикле. Сам запрос формируется в цикле, и если быть точным до символа, то имеет такой вид (цикл был принудительно "урезан" до 3-х итераций. На самом деле их с десяток:

Код

INSERT INTO Vari (CodeWork, CodeSection, CodeAddDel,
DateAdd, DateCalc, CodeCategor, CodeRate, Summa,
Days, Hours, Procent, CodeStat, IDAnalit, IsOtkl)
VALUES
(
35,
3,
510,
"01.01.2009",
"01.01.2009",
6,
404,
500000,
0, 0, 0, 0, 0, "0")
,
(
123,
3,
510,
"01.01.2009",
"01.01.2009",
5,
409,
5000000,
0, 0, 0, 0, 0, "0")
,
(
185,
3,
510,
"01.01.2009",
"01.01.2009",
5,
407,
100000,
0, 0, 0, 0, 0, "0")


При этом, если выполнить запрос, где будет добавляться только одна запись:
Код

INSERT INTO Vari (CodeWork, CodeSection, CodeAddDel,
DateAdd, DateCalc, CodeCategor, CodeRate, Summa,
Days, Hours, Procent, CodeStat, IDAnalit, IsOtkl)
VALUES
(
35,
3,
510,
"01.01.2009",
"01.01.2009",
6,
404,
500000,
0, 0, 0, 0, 0, "0")

то все ОК.

В чем может быть проблема? Чуется мне что формат запроса не тот, хотя брал http://dev.mysql.com/doc/refman/4.1/en/insert.html. Может BDE не умеет обратбатывать такие запросы?

Добавлено через 2 минуты и 13 секунд
Забыл написать, ругается на 15-й символ.

Автор: vladimir74 20.2.2009, 14:51
не уверен, что можно VALUES через запятую слать...

Добавлено через 3 минуты и 7 секунд
только что проверил у себя. Как минимум firebird этого не позволяет....
да и что то я не припомню такого синтаксиса вообще.... :(

Добавлено через 4 минуты и 1 секунду
Цитата(Poseidon @  20.2.2009,  12:22 Найти цитируемый пост)
Забыл написать, ругается на 15-й символ. 

т.е на запятой...

Автор: Rodman 20.2.2009, 14:55
Цитата(Poseidon @  20.2.2009,  14:22 Найти цитируемый пост)
Забыл написать, ругается на 15-й символ. 

какими словами?

Автор: vladimir74 20.2.2009, 15:05
Цитата(Poseidon @  20.2.2009,  12:22 Найти цитируемый пост)
Чуется мне что формат запроса не тот, хотя брал отсюда. 

инткресно вообще то, даже не знаю кому верить...
на том сайте и в правду указан такой синтекс, но кроме него, никто про такую возможность не говорит :(
сейчас попробую на какой нить таблице в phpMyAdmin если он не сможет то ИМХО MySQL этого тоже не может...
Но это 100% не стандартный формат для sql!!
так что насчет парадокса - это очень большой вопрос...

Добавлено через 8 минут и 27 секунд
хм MySQL это и в правду может  smile не ожидал....
тогда смотри в документацию по парадоксу....

Автор: Kbl4AH 20.2.2009, 15:48
Запрос на добавление одной записи (таким способом можно вставить только одну запись в sql; пробовал в Oracle вставить так несколько записей - не получилось):
Код

INSERT INTO назначение [(поле_1[, поле_2[, ...]])]
VALUES (значение_1[, значение_2[, ...])


Запрос на добавление нескольких записей:
Код

INSERT INTO назначение [IN внешняяБазаДанных] [(поле_1[, поле_2[, ...]])]
SELECT [источник.]поле_1[, поле_2[, ...]
FROM выражение

Попробовал вставить 2 записи, по-моему - не айс:
Код

insert into card (tabnum, fam) 
select 1, '1' from dual  
union all
select 2, '2' from dual

Имхо вставляй в цикле, только текст запроса каждый раз не изменяй, а введи переменные и только их значения в цикле изменяй... а после цикла commit сделаешь...

Автор: Poseidon 23.2.2009, 00:46
Цитата(Rodman @  20.2.2009,  14:55 Найти цитируемый пост)
какими словами?
Неверный символ, какими еще smile

В общем, стало понятно что SQL-синтаксис Парадокса не умеет это обрабатывать, но появилась одна неприятность. При добавлении порядка 2000 записей происходит достаточно заметное "подвисание" секунды на 2-3. Если учесть, что комп не такой уж и старенький и предполагается запускать программу и на более стабых мощностях, неприятность серьезная. Есть ли еще какой выход, кроме как крутить Insert в цикле?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)