Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle DROP TABLE IF EXISTS Alternativas


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.