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.