Plsql 如果表未退出,则无法获取异常
我必须结束我在桌子上的一些会议。如果表不存在,我试图抛出一个异常,但我没有得到异常。有人能帮我吗?这是我的代码:Plsql 如果表未退出,则无法获取异常,plsql,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
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;
/
如果表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;
如果表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;
如果表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;
如果表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;
这没有道理。您正试图终止一个会话-为什么希望这会引发ORA-00942:表或视图不存在?没有涉及任何表格。您可能会得到一个例外:ORA-00030:用户会话ID不存在。我在for语句中得到了表的sid和序列号。可能是这些表不存在。这是因为我需要控制这些异常sid和串行标识一个会话,而不是一个表。每次用户连接到Oracle时,都可以在v$session view中看到他们的会话。是。我知道。我说我以前做过一次选择来提取我搜索的v$会话的sid和序列号,我把这些数据放在一个表中,所以我必须在一个带有forOK的表中查找,所以你的意思是这个表可能不存在:select sid,serial FROM xxxxxx?在这种情况下,代码甚至不会编译,因此它不会运行,您也不会得到运行时异常。我现在就回答……这没有道理。您正试图终止一个会话-为什么希望这会引发ORA-00942:表或视图不存在?没有涉及任何表格。您可能会得到一个例外:ORA-00030:用户会话ID不存在。我在for语句中得到了表的sid和序列号。可能是这些表不存在。这是因为我需要控制这些异常sid和串行标识一个会话,而不是一个表。每次用户连接到Oracle时,都可以在v$session view中看到他们的会话。是。我知道。我说我以前做过一次选择来提取我搜索的v$会话的sid和序列号,我把这些数据放在一个表中,所以我必须在一个带有forOK的表中查找,所以你的意思是这个表可能不存在:select sid,serial FROM xxxxxx?在这种情况下,代码甚至不会编译,因此它不会运行,您也不会得到运行时异常。我现在就回答……这没有道理。您正试图终止一个会话-为什么希望这会引发ORA-00942:表或视图不存在?没有涉及任何表格。您可能会得到一个例外:ORA-00030:用户会话ID不存在。我在for语句中得到了表的sid和序列号。可能是这些表不存在。这是因为我需要控制这些异常sid和串行标识一个会话,而不是一个表。每次用户连接到Oracle时,都可以在v$session view中看到他们的会话。是。我知道。我说我以前做过一次选择来提取我搜索的v$会话的sid和序列号,我把这些数据放在一个表中,所以我必须在一个带有forOK的表中查找,所以你的意思是这个表可能不存在:select sid,serial FROM xxxxxx?在这种情况下,代码甚至不会编译,因此它不会运行,您也不会得到运行时异常。我现在就回答……这没有道理。您正试图终止一个会话-为什么希望这会引发ORA-00942:表或视图不存在?没有涉及任何表格。您可能会得到一个例外:ORA-00030:用户会话ID不存在。我在for语句中得到了表的sid和序列号。可能是这些表不存在。这是因为我需要控制这些异常sid和串行标识一个会话,而不是一个表。每次用户连接到Oracle时,都可以在v$session view中看到他们的会话。是。我知道。我说我以前做过一次选择来提取我搜索的v$会话的sid和序列号,我把这些数据放在一个表中,所以我必须在一个带有forOK的表中查找,所以你的意思是这个表可能不存在:select sid,serial FROM xxxxxx?在这种情况下,代码甚至不会编译,因此它不会运行,您也不会得到运行时异常。我现在就回答。。。