Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

компонент-скриптогонялка в этой коллекции есть?


Наверх

Титульная страница Поиск, карта сайта Написать письмо