Текущий архив: 2004.11.14;
Скачать: CL | DM;
Внизразмножение сессий на сервере БД Найти похожие ветки
← →
denis24 (2004-10-06 17:57) [0]Конекчусь к серверу
создаю временную таблицу с пом query (create table....)
Потом , при подготовке даныых для insert into.... эим же query,
вызываю storedproc где получаю нужное мне значение,закрываю этот storedproc
Заполняю нужные параметры запроса,пытаюсь выполнить- пишет таблица(которую я создал в начале ) не существует.
На дебугере сервера видно что создание табл,хранимая процедура выполняется в одной сессии.А как только вызываю insert into .....в эту времен табл созд вторая сессия.
Что посоветуете?
← →
denis24 (2004-10-07 09:19) [1]Неужели никто не знает?
← →
Sergey13 © (2004-10-07 09:24) [2]>Что посоветуете?
Может не создавать временных таблиц в программе(если сервер не поддерживает нормальных временных таблиц)? Уж если шибко надо, то создать постоянную и использовать как временную - например писать туда, помимо прочего, какой нить идентификатор сессии.
← →
Nikolay M. © (2004-10-07 09:37) [3]
> Sergey13 © (07.10.04 09:24) [2]
А что в твоем понимании нормальные временные таблицы?
> denis24
Что мешает выполнить все в одном батче? И создание ВТ, и вызов ХП, и заполнение ВТ?
← →
Sergey13 © (2004-10-07 09:43) [4]2[3] Nikolay M. © (07.10.04 09:37)
>А что в твоем понимании нормальные временные таблицы?
Например как в Оракле. Создается постоянная таблица со статусом "временная". Данные там могут жраниться либо в течении сессии либо в течении транзакции. Кочилась сессия/транзакция данные удаляются автоматически сервером. Для прикладной программы это обычная таблица.
← →
Nikolay M. © (2004-10-07 09:55) [5]В МС СКЛ временная #-таблица тоже существует в рамках сессии.
← →
denis24 (2004-10-07 09:56) [6]Сервер норамальный- Sybase.Временная таблица создается на время сесси,потом автом.удаляется.
Что такое батч?
← →
Sergey13 © (2004-10-07 10:01) [7]2[5] Nikolay M. © (07.10.04 09:55)
Ну и? Я не понял - ты мне возражаешь или просто интересуешься? 8-) Я не знаком ни с МС СКЛ, ни с сайбейсом, поэтому и рекомендация была самого общего плана, которая будет работать везде.
← →
Nikolay M. © (2004-10-07 11:42) [8]
> Sergey13 © (07.10.04 10:01) [7]
Интересуюсь, что такое "нормальные" ВТ. Выяснилось, что они мало чем отличаются от ВТ в МС СКЛ.
> Что такое батч?
В БОЛ.
← →
denis24 (2004-10-08 11:53) [9]Может я не правильно делаю запросы и вызываю хранимаю процедуру?
query1.sql.add(" if exists (select 1 from tempdb..sysobjects where id = object_id(""#_MyTemp_1"") and type = ""U"") DROP TABLE #_MyTemp_1");
query1.ExecSQL;
query1.close;
query1.sql.Clear;
query1.sql.Add("create table #_MyTemp_1(bin char(16),sc char(14),ost_sc numeric (17,2))");//,egf_cpnc char(6))");
query1.ExecSQL;
query1.Close;
query1.SQL.Clear;
query1.sqL.Add("INSERT INTO #_MyTemp_1");
query1.sql.add(" (bin,sc,ost_sc)");
query1.SQL.Add(" VALUES (:bin,:sc,:ost_sc)");
query1.Params.Clear;
P1 := TParam.Create(query1.Params, ptInput);
P2 := TParam.Create(query1.Params, ptInput);
P3 := TParam.Create(query1.Params, ptInput);
query1.Params[0].Name := "bin";
query1.Params[1].Name := "sc";
query1.Params[2].Name := "ost_sc";
.
.
query1.UnPrepare ;
query1.ParamByname("bin").Asstring:=n;
query1.ParamByname("sc").Asstring:=Table2.fieldbyname("sc").AsString;
query1.ParamByname("ost_sc").AsFloat:=Get_ost(table2.fieldbyname("sc").AsString);
query1.prepare;
query1.ExecSQL;->вот тут и создается вторая сессия в которой уже нет вышесозданной временной таблицы!!!!
А вот и сам GET_OST
function Get_ost (acc:String ) :single ;
begin
StoredProc1.UnPrepare;
toredProc1.ParamByName("@rdate").AsString:=FormatDateTime("yyyy-mm-dd",now());
StoredProc1.ParamByName("@acc").AsString:=acc;
StoredProc1.ParamByName("@fl_ost").AsString:="O";
StoredProc1.Prepare;
try
StoredProc1.ExecProc;
finally
begin
result:=StoredProc1.Parambyname("@saldo").Asfloat;
redProc1.close;end;
end;
end;
← →
Silver John (2004-10-09 14:46) [10]Закатай все операции в одну хранимую процедуру
← →
Silver John (2004-10-09 14:51) [11]ИМХО здесь можно вообще отказаться от временной таблицы
← →
denis24 (2004-10-12 09:21) [12]>Silver John [11]
Как?
← →
xShadow © (2004-10-12 09:37) [13]А у тебя создаётся TSession и TDataBase до обращения к БД до этого всего ?
← →
Pul (2004-10-12 11:22) [14]После создания временной таблицы выполни COMMIT
← →
Silver John (2004-10-12 12:39) [15]Если объяснишь суть задачи, напишу тебе сохраненку, как надумаешь, стучись на 196470609
← →
DiamondShark © (2004-10-12 12:46) [16]Транзакцию открывай.
По умолчанию режим autocommit, так что каждый оператор -- это отдельная транзакция.
← →
denis24 (2004-10-12 16:57) [17]To pul
query1.sql.add("commit");
query1.execsql;
не помогает
Страницы: 1 вся ветка
Текущий архив: 2004.11.14;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.042 c