Всем привет, пишу себе упрощалку для сброса сессий в Oracle, блокируется запись в таблице и ее необходимо скидывать. Стандартно это делаю через апдейт таблицы и сброс сессии:
select 'alter system kill session '''||b.SID||','||b.SERIAL#||''''||' immediate;'
from v$session s, v$session b where s.status='ACTIVE' and s.EVENT like 'enq%'
and s.seconds_in_wait>1
and s.blocking_session=b.sid
order by b.sid, s.sid
Хотел бы реализовать на Delphi:
1) беру в отдельном потоке таблицу на апдейт
2) скидываю ее по щелчку второй кнопки
Но увы почему-то не скидывается
На форме два ADOQuery один делает соответственно апдейт, а вот второй не хочет скидывать сессию, просто висит
Содержимое ADOQuery: (запрос в девелопере скидывает сессию, а вот через Делфи не фига)
declare
begin
for ss in (
select b.SID, b.SERIAL#
from v$session s, v$session b, V$SQL sq
where s.status = 'ACTIVE'
and s.EVENT like 'enq%'
and s.seconds_in_wait > 1
and s.blocking_session = b.sid
and s.SQL_ADDRESS=sq.ADDRESS
and SQL_TEXT like '%--#@$rE3df%^!!%'
)
loop
execute immediate 'alter system kill session ''' || to_char(ss.sid,'999999')
|| ',' ||to_char(ss.serial#,'999999')||'''';
commit;
end loop;
end;
Вызываю его: Form1.ADOQuery2.ExecSQL;
Поток работает нормально, блокировка появляется.
Помогите советом =)
Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста. |