![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TOracleQuery - многострочный SQL [D7]
tytus © (2007-04-03 18:12:00)В цикле выполняется:
for i:=1 to n do begin
...
s:='Insert into .... Values(...)'; -- строка без точки с запятой
OQ1.Close;
OQ1.SQL.Clear;
OQ1.SQL.Add(s);
OQ1.Execute;
end;//for
OracleSession1.Commit;
переменная s принимает разные значения.
Вот хотелось бы вначале грузить s в StringList, а затем (после цикла) OQ1.SQL.Assign(StringList); и Execute;
НО!
Ни запятая в конце строк, ни точка с запятой - не помогает - ругается....
Как правильно записать строки в листе?
ANB (2007-04-04 12:35:00) [1]
> Desdechado © (04.04.07 11:24) [7]
> > В безымянном блоке можно выполнять не все команды SQL,
> например, нельзя DDL.
> C чего бы это? Попробуй:
> BEGIN
> EXECUTE IMMEDIATE 'CREATE TABLE xxx( i INTEGER )';
> END;
> Да и у автора одни INSERT'ы.
Кхм. Однако с клиента намного проще отправить просто create table и не выеживать :)
Тем более скриптогонялка есть как в DOA, так и очень легко написать самому.
А у автора - массовые инсерты. Глубоко сомневаюсь, что передача данных в одном pl/sql блоке сильно повысит скорость, а вот неудобств от неиспользования параметров (или извращенного их использования) добавит много.
Desdechado (2007-04-04 11:24:00) [2]> В безымянном блоке можно выполнять не все команды SQL, например, нельзя DDL.
C чего бы это? Попробуй:
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE xxx( i INTEGER )';
END;
Да и у автора одни INSERT'ы.
ANB (2007-04-04 11:21:00) [3]
> tytus © (03.04.07 18:25) [2]
> >Правильный Вася (03.04.07 18:19) [1]
> Нету.
Есть. Но работает довольно криво и скорости не прибавит
ANB (2007-04-04 11:20:00) [4]
> Безымянный кодовый блок [3] на PLSQL
В безымянном блоке можно выполнять не все команды SQL, например, нельзя DDL.
> for i:=1 to n do begin
> ...
> s:='Insert into .... Values(...)'; -- строка без точки с
> запятой
> OQ1.Close;
> OQ1.SQL.Clear;
> OQ1.SQL.Add(s);
> OQ1.Execute;
> end;//for
Мой телепатор подсказывает, что в s меняется только значения в values.
Тогда намного удобнее будет по другому :
OQ1.SQL.Text := 'insert into table1 (F1, F2, F3 . . .) values (:F1, :F2, :F3)';
OQ1.DeclareVariable('F1', ftString); // Пишу по памяти, т.к. DOA ша нету
OQ1.DeclareVariable('F2', ftString); // Пишу по памяти, т.к. DOA ша нету
OQ1.DeclareVariable('F3', ftString); // Пишу по памяти, т.к. DOA ша нету
OQ1.Prepare; // В старых версиях DOA могут быть проблемы
for i := 1 to n do begin
QQ1.SetVariable('F1', 'Вася');
QQ1.SetVariable('F2', 'Вася');
QQ1.SetVariable('F3', 'Вася');
OQ1.Execute;
end;
Desdechado (2007-04-03 21:06:00) [5]Безымянный кодовый блок [3] на PLSQL
Reindeer Moss Eater (2007-04-03 19:41:00) [6]begin
statement;
....
statement;
end;
tytus (2007-04-03 18:25:00) [7]>Правильный Вася (03.04.07 18:19) [1]
Нету.
Правильный Вася (2007-04-03 18:19:00) [8]компонент-скриптогонялка в этой коллекции есть?