Форум: "Базы";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c