O Oracle Database não inclui o
IF EXISTS
cláusula que alguns outros DBMSs oferecem em seu DROP TABLE
declarações. Portanto, se quisermos evitar erros desagradáveis resultantes da tentativa de eliminar uma tabela inexistente, precisamos fazer um pouco de trabalho extra. Opção 1:verifique se a tabela existe
Podemos verificar o
DBA_TABLES
visualização do dicionário de dados para ver se a tabela existe. Essa visualização descreve todas as tabelas relacionais no banco de dados. Suas colunas são as mesmas de ALL_TABLES
. Podemos verificar esta tabela para ver se a tabela existe, então apenas execute o
DROP TABLE
declaração se isso acontecer. Exemplo:
DECLARE
tbl_count number;
sql_stmt long;
BEGIN
SELECT COUNT(*) INTO tbl_count
FROM dba_tables
WHERE owner = 'HR'
AND table_name = 'T1';
IF(tbl_count <> 0)
THEN
sql_stmt:='DROP TABLE T1';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
Resultado:
PL/SQL procedure successfully completed.
Neste caso, a tabela chamada
t1
já existia e foi abandonado. Agora, se executarmos o mesmo código novamente, obteremos a mesma saída:
PL/SQL procedure successfully completed.
Não ocorreu nenhum erro, mesmo que a tabela não exista mais.
No entanto, se simplesmente tentarmos descartar a tabela sem primeiro verificar sua existência, obteremos um erro:
DROP TABLE T1;
Resultado:
Error report - ORA-00942: table or view does not exist 00942. 00000 - "table or view does not exist"
Opção 2:testar o erro
Outra maneira de fazer isso é simplesmente ir em frente e executar o
DROP TABLE
instrução e, em seguida, capturar qualquer erro ORA-00942 que ocorrer. Especificamente, detectamos qualquer erro SQLCODE -942 que ocorra. Exemplo:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE t1';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
Resultado:
PL/SQL procedure successfully completed.
Eu executei isso mesmo que o
T1
mesa não existia. O erro ORA-00942 foi detectado e tratado para que não recebemos uma mensagem de erro. Se a tabela já existisse, a tabela teria sido descartada e veríamos a mesma saída.