sql >> Base de Datos >  >> RDS >> Oracle

Oracle DROP TABLE SI EXISTE Alternativas

Oracle Database no incluye IF EXISTS cláusula que algunos otros DBMS ofrecen en su DROP TABLE declaraciones. Por lo tanto, si queremos evitar errores desagradables resultantes de intentar eliminar una tabla inexistente, debemos hacer un poco de trabajo adicional.

Opción 1:comprobar si la tabla existe

Podemos comprobar el DBA_TABLES vista del diccionario de datos para ver si la tabla existe. Esta vista describe todas las tablas relacionales en la base de datos. Sus columnas son las mismas que las de ALL_TABLES .

Podemos verificar esta tabla para ver si existe, luego solo ejecute DROP TABLE declaración si lo hace.

Ejemplo:

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.

En este caso, la tabla llamada t1 ya existía y se eliminó.

Ahora, si volvemos a ejecutar el mismo código, obtenemos el mismo resultado:

PL/SQL procedure successfully completed.

No ocurrió ningún error, aunque la tabla ya no existe.

Sin embargo, si simplemente intentamos eliminar la tabla sin verificar primero su existencia, obtendremos un error:

DROP TABLE T1;

Resultado:

Error report -
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"

Opción 2:prueba del error

Otra forma de hacerlo es simplemente seguir adelante y ejecutar DROP TABLE declaración y, a continuación, detecte cualquier error ORA-00942 que se produzca. Específicamente, detectamos cualquier error SQLCODE -942 que ocurra.

Ejemplo:

BEGIN
   EXECUTE IMMEDIATE 'DROP TABLE t1';
EXCEPTION
   WHEN OTHERS THEN
      IF SQLCODE != -942 THEN
         RAISE;
      END IF;
END;

Resultado:

PL/SQL procedure successfully completed.

Ejecuté eso a pesar de que el T1 la mesa no existia El error ORA-00942 fue detectado y manejado, por lo que no recibimos un mensaje de error.

Si la tabla ya hubiera existido, se habría eliminado y veríamos el mismo resultado.