我必须杀死我在桌子上的一些会话。如果表没有退出,我试图抛出异常,但我没有得到异常。有人可以帮我吗?这些是我的代码:
DECLARE
table_not_found EXCEPTION;
PRAGMA EXCEPTION_INIT(table_not_found, -00942);
BEGIN
FOR c IN (SELECT sid, serial FROM xxxxxx )
LOOP
EXECUTE IMMEDIATE 'alter system kill session ''' || c.sid || ','
|| c.serial || ''' IMMEDIATE';
END LOOP;
EXCEPTION
WHEN table_not_found THEN
dbms_output.put_line('Table not found');
WHEN OTHERS THEN
dbms_output.put_line('Other');
END;
/
答案 0 :(得分:3)
如果表xxxxxx
不存在,那么您的代码甚至不会编译,因此它不会运行,您将不会获得运行时异常。
要使其成为运行时异常,您需要使用动态SQL从表中进行选择:
DECLARE
table_not_found EXCEPTION;
PRAGMA EXCEPTION_INIT(table_not_found, -00942);
cur SYS_REFCURSOR;
v_sid INTEGER;
v_serial INTEGER;
BEGIN
OPEN cur FOR 'SELECT sid, serial FROM xxxxxx' ;
LOOP
FETCH cur INTO v_sid, v_serial;
EXIT WHEN cur%NOTFOUND;
EXECUTE IMMEDIATE 'alter system kill session ''' || v_sid || ',' || v_serial || ''' IMMEDIATE';
END LOOP;
CLOSE cur;
EXCEPTION
WHEN table_not_found THEN
dbms_output.put_line('Table not found');
WHEN OTHERS THEN
dbms_output.put_line('Other');
END;