No meu banco de dados, tabelas:
- test1 - não existe
- test2--existir
- test3--existir
Ao executar o bloco abaixo, ocorre um erro "tabela não existe" para test1. No entanto, quero executar a instrução drop abaixo para test2 e test3, apesar do erro, porque, no meu caso, "não existe" é bom para mim, pois vou criar todas as 3 tabelas na próxima etapa.
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;
esperando: - ele deve descartar test2 e test3 também, mesmo se obtivermos o erro table doesnot exist para test1.
Você precisaria capturar explicitamente o erro "tabela não existe" e ignorá-lo, o que pode ser feito da seguinte forma:
Observe que criei um subprocedimento que elimina a tabela; isso evita replicar a mesma lógica repetidamente.
Você precisa capturar a exceção para cada instrução drop: