Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.01;
Скачать: CL | DM;

Вниз

TOracleQuery - многострочный SQL   Найти похожие ветки 

 
tytus ©   (2007-04-03 18:12) [0]

В цикле выполняется:
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;
НО!
Ни запятая в конце строк, ни точка с запятой - не помогает - ругается....
Как правильно записать строки в листе?


 
Правильный Вася   (2007-04-03 18:19) [1]

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


 
tytus ©   (2007-04-03 18:25) [2]

>Правильный Вася   (03.04.07 18:19) [1]
Нету.


 
Reindeer Moss Eater ©   (2007-04-03 19:41) [3]

begin
statement;
....
statement;
end;


 
Desdechado ©   (2007-04-03 21:06) [4]

Безымянный кодовый блок [3] на PLSQL


 
ANB ©   (2007-04-04 11:20) [5]


> Безымянный кодовый блок [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;


 
ANB ©   (2007-04-04 11:21) [6]


> tytus ©   (03.04.07 18:25) [2]
> >Правильный Вася   (03.04.07 18:19) [1]
> Нету.

Есть. Но работает довольно криво и скорости не прибавит


 
Desdechado ©   (2007-04-04 11:24) [7]

> В безымянном блоке можно выполнять не все команды SQL, например,  нельзя DDL.
C чего бы это? Попробуй:
BEGIN
 EXECUTE IMMEDIATE "CREATE TABLE xxx( i INTEGER )";
END;

Да и у автора одни INSERT"ы.


 
ANB ©   (2007-04-04 12:35) [8]


> 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 блоке сильно повысит скорость, а вот неудобств от неиспользования параметров (или извращенного их использования) добавит много.



Страницы: 1 вся ветка

Текущий архив: 2007.07.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
15-1180808132
Витян
2007-06-02 22:15
2007.07.01
Купил ноутбук, а драверов нет! Что делать?


15-1180883771
Leonidmsk
2007-06-03 19:16
2007.07.01
Проблема с HDD.


15-1180664017
Slider007
2007-06-01 06:13
2007.07.01
С днем рождения ! 1 июня 2007г Пятница


15-1180932762
Павел Калугин
2007-06-04 08:52
2007.07.01
И снова про Delphi for PHP


3-1175625608
Hydroliskus
2007-04-03 22:40
2007.07.01
BDE выдает ошибку row fetch limit exceeded