![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие неявного курсора в Оракле [D7]
Сатир © (2006-10-24 17:13:00)Как закрыть неявный курсор в Оракле, после закрытия связанного с ним датасета?
в оракле есть пакет, из которого вызывается такая процедура
Procedure P_Get_Dict(
p_Sql_Id In Number,
p_Sql_Par In Clob,
p_Sql Out TRef_Cursor
);
где Type TRef_Cursor is Ref Cursor;
В Delphi на форме установлен TOracleDataSet, в котором вызывается эта процедура:
begin
-- call procedure
ERP.PKG_APPLICATION.P_Get_Dict(:P_SQL_Id,:P_SQL_PAR, P_SQL =>:CUR);
end;
после закрытия этого датасета
если выполнить запрос на предмет открытых курсоров
Select *
From V$open_Cursor t
Where upper(t.sql_text) Like upper('%v_shop%')
то получим наш открытый курсор.
Вопрос: как его можно закрыть?
Сатир (2006-10-24 18:14:00) [21]уже сделал.
если кому интересно , в хелпе по ДОА ссылка на статью
Using a cursor variable as a TOracleQuery
Reindeer Moss Eater (2006-10-24 17:53:00) [22]Но в базе может стоять ограничение на кол-во открытых курсоров, поэтому нужно закрывать неиспользуемые.
Неявные закрываются при выходе из области видимости.
Если же они не закрываются по причинам кэширования, то на лимит открытых это никак не будет влиять.
Сатир (2006-10-24 17:47:00) [23]Да, после закрытия сессии, курсор закрывается.
Но в базе может стоять ограничение на кол-во открытых курсоров, поэтому нужно закрывать неиспользуемые.
Desdechado (2006-10-24 17:27:00) [24]C какой целью?
Оракл кэширует курсоры на случай их повторной надобности, чтоб потом не выполнять.
Можешь попробовать изменить контекст сессии, это, говорят, закрывает кэшированные курсоры.
Но смысла не вижу.