在我的数据库中,表:
- test1--不存在
- 测试2--存在
- 测试3--存在
运行下面的块时,它会为 test1 抛出“表不存在”错误。但是,尽管出现错误,我还是想为 test2 和 test3 运行以下 drop 语句,因为对于我的情况,“不存在”对我来说很好,因为我将在下一步中创建所有 3 个表。
set serveroutput ON;
BEGIN
begin
EXECUTE IMMEDIATE 'drop table test1';
dbms_output.put_line('test1 dropeed successfully');
EXECUTE IMMEDIATE 'drop table test2';
dbms_output.put_line('test2 dropped successfully');
EXECUTE IMMEDIATE 'drop table test3';
dbms_output.put_line('test3 dropped successfully');
exception
when others then
dbms_output.put_line('Error >> '|| SQLERRM ||' -->'|| dbms_utility.format_error_backtrace);
end;
end;
期望:-它也应该删除 test2 和 test3,即使我们得到 test1 的表不存在错误。
您需要显式捕获“表不存在”错误并忽略它,您可以这样做:
请注意,我创建了一个删除表的子过程;这避免了一遍又一遍地重复相同的逻辑。
您需要捕获每个 drop 语句的异常: