Drop Table Exception Intermittently 不起作用
Drop Table Exception Intermittently doesn't work
我一直在将我的 "drop tables" 包装在以下块中,以避免在 table 不存在时引发 942 错误:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE1';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE2';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE3';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE4';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE5';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE6';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN RAISE;
END IF;
END;
这在大多数情况下都非常有效。但是,它似乎会间歇性地拒绝删除这个 table 或那个。它并不总是相同的 table,并且它并不总是发生在任何特定的一组查询中。它只是发生...有时...出于我无法解释的原因,因此我问这个问题。
有没有其他人经历过这种情况,如果有,你是怎么做的?
我能想到的最可能的原因是 table 在另一个会话中被锁定(未完成的提交)。报告了什么错误?
您的脚本也有问题 - 如果 TABLE1 已经被删除,TABLE2...6 将不会被删除,因为您的第一个 DROP 将跳转到异常。
最好这样做:
DECLARE
PROCEDURE drp ( tName IN VARCHAR2 ) IS
BEGIN
EXECUTE IMMEDIATE 'drop table ' || tName;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN RAISE;
END IF;
END;
BEGIN
drp ( 'TABLE1' );
drp ( 'TABLE2' );
drp ( 'TABLE3' );
-- etc
END;
我一直在将我的 "drop tables" 包装在以下块中,以避免在 table 不存在时引发 942 错误:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE1';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE2';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE3';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE4';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE5';
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE6';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN RAISE;
END IF;
END;
这在大多数情况下都非常有效。但是,它似乎会间歇性地拒绝删除这个 table 或那个。它并不总是相同的 table,并且它并不总是发生在任何特定的一组查询中。它只是发生...有时...出于我无法解释的原因,因此我问这个问题。
有没有其他人经历过这种情况,如果有,你是怎么做的?
我能想到的最可能的原因是 table 在另一个会话中被锁定(未完成的提交)。报告了什么错误?
您的脚本也有问题 - 如果 TABLE1 已经被删除,TABLE2...6 将不会被删除,因为您的第一个 DROP 将跳转到异常。
最好这样做:
DECLARE
PROCEDURE drp ( tName IN VARCHAR2 ) IS
BEGIN
EXECUTE IMMEDIATE 'drop table ' || tName;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN RAISE;
END IF;
END;
BEGIN
drp ( 'TABLE1' );
drp ( 'TABLE2' );
drp ( 'TABLE3' );
-- etc
END;