如果表格未退出

时间:2015-04-22 10:03:16

标签: plsql

我必须杀死我在桌子上的一些会话。如果表没有退出,我试图抛出异常,但我没有得到异常。有人可以帮我吗?这些是我的代码:

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;
/

1 个答案:

答案 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;