如果 table 不退出则无法获得异常
Can't get exception if the table doesn't exits
我必须终止我在 table 中的一些会话。如果 table 没有退出但我没有得到异常,我试图抛出异常。有人可以帮我吗?这是我的代码:
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;
/
如果 table xxxxxx
不存在,那么您的代码甚至不会编译,因此它不会 运行 并且您不会获得 运行 时间异常。
要使其成为 运行 次例外,您需要使用动态 SQL:
从 table select
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;
我必须终止我在 table 中的一些会话。如果 table 没有退出但我没有得到异常,我试图抛出异常。有人可以帮我吗?这是我的代码:
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;
/
如果 table xxxxxx
不存在,那么您的代码甚至不会编译,因此它不会 运行 并且您不会获得 运行 时间异常。
要使其成为 运行 次例外,您需要使用动态 SQL:
从 table selectDECLARE
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;