DECLARE
PROCEDURE
KILL_ALL_USER_SESSION_DBMS_SQL(P_USERNAME_SESSION
IN
VARCHAR2 :=
''
)
IS
V_CURSOR_NAME_SESSION NUMBER := DBMS_SQL.OPEN_CURSOR;
V_STMT_SESSION VARCHAR2(500) :=
'SELECT SID AS SID, SERIAL# AS SERIAL
FROM V$SESSION
WHERE USERNAME IS NOT NULL AND USERNAME = '
||
''
''
||P_USERNAME_SESSION||
''
''
;
V_EXEC_SESSION NUMBER;
V_SID_SESSION NUMBER;
V_SERIAL_SESSION NUMBER;
V_CURSOR_NAME_SESSION_KILL NUMBER;
V_STMT_SESSION_KILL VARCHAR2(500);
V_EXEC_SESSION_KILL NUMBER;
BEGIN
DBMS_SQL.PARSE(V_CURSOR_NAME_SESSION, V_STMT_SESSION, DBMS_SQL.NATIVE);
V_EXEC_SESSION := DBMS_SQL.
EXECUTE
(V_CURSOR_NAME_SESSION);
DBMS_SQL.DEFINE_COLUMN(V_CURSOR_NAME_SESSION,1,V_SID_SESSION);
DBMS_SQL.DEFINE_COLUMN(V_CURSOR_NAME_SESSION,2,V_SERIAL_SESSION);
LOOP
EXIT
WHEN
DBMS_SQL.FETCH_ROWS(V_CURSOR_NAME_SESSION) = 0;
DBMS_SQL.COLUMN_VALUE(V_CURSOR_NAME_SESSION,1,V_SID_SESSION);
DBMS_SQL.COLUMN_VALUE(V_CURSOR_NAME_SESSION,2,V_SERIAL_SESSION);
V_STMT_SESSION_KILL :=
'ALTER SYSTEM KILL SESSION '
''
||V_SID_SESSION||
','
||V_SERIAL_SESSION||
''
''
;
V_CURSOR_NAME_SESSION_KILL := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(V_CURSOR_NAME_SESSION_KILL, V_STMT_SESSION_KILL, DBMS_SQL.NATIVE);
V_EXEC_SESSION_KILL := DBMS_SQL.
EXECUTE
(V_CURSOR_NAME_SESSION_KILL);
DBMS_SQL.CLOSE_CURSOR(V_CURSOR_NAME_SESSION_KILL);
END
LOOP;
DBMS_SQL.CLOSE_CURSOR(V_CURSOR_NAME_SESSION);
EXCEPTION
WHEN
OTHERS
THEN
DBMS_SQL.CLOSE_CURSOR(V_CURSOR_NAME_SESSION_KILL);
DBMS_SQL.CLOSE_CURSOR(V_CURSOR_NAME_SESSION);
END
;