oracle,存储过程报错,实现杀掉死锁进程,求大牛

2025-02-10 06:49:17
推荐回答(1个)
回答1:

估计你SQL 拼接错了吧,建议打印一下;

我的测试过程;

--新建一个会话窗口,挂起一个会话;
SQL> create table test(col varchar2(20));
Table created
SQL> insert into test values('test');
1 row inserted 
--再新建一个会话窗口,杀掉锁定test表的会话
SQL> declare
  2  begin
  3    for vref in (select t.sid, t.serial#
  4                   from v$session t
  5                  where sid in
  6                        (select sid
  7                           from v$lock
  8                          where id1 in
  9                                (select object_id
 10                                   from user_objects t
 11                                  where object_name = upper('test')))) loop
 12      execute immediate 'alter system kill session  ''' || vref.sid || ',' ||
 13                        vref.serial# || '''';
 14    end loop;
 15  end;
 16  /
PL/SQL procedure successfully completed
SQL> 
SQL> select t.sid, t.serial#
  2                   from v$session t
  3                  where sid in
  4                        (select sid
  5                           from v$lock
  6                          where id1 in
  7                                (select object_id
  8                                   from user_objects t
  9                                  where object_name = upper('test')))
 10  /
       SID    SERIAL#
---------- ----------
SQL>