Oracle Database no incluye el IF NOT EXISTS
cláusula con su CREATE TABLE
declaración, como lo hacen otros DBMS.
Por lo tanto, si no queremos que se produzca un error debido a que el nombre de la tabla ya se está utilizando, debemos utilizar otros métodos para comprobar la existencia de la tabla.
Opción 1:Comprobar DBA_TABLES
Ver
DBA_TABLES
es una vista de diccionario de datos que 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 la tabla ya existe, luego solo ejecute CREATE TABLE
declaración si aún no existe.
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:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
Resultado:
PL/SQL procedure successfully completed.
En este caso, la tabla se creó porque ninguna tabla existente tenía el nombre t1
.
Ahora, si tratamos de crear la tabla nuevamente, obtendremos el mismo resultado que el procedimiento PL/SQL completó con éxito y no habrá ningún error.
Sin embargo, si simplemente intentamos crear la tabla sin verificar primero su existencia, obtendremos un error:
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
);
Resultado:
Error report - ORA-00955: name is already used by an existing object 00955. 00000 - "name is already used by an existing object"
Opción 2:Prueba del error
Otra forma de hacerlo es simplemente seguir adelante y ejecutar CREATE TABLE
declaración y, a continuación, detecte cualquier error ORA-00955 que se produzca. Específicamente, detectamos cualquier error SQLCODE -955 que ocurra.
Ejemplo:
DECLARE
sql_stmt long;
BEGIN
sql_stmt:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -955 THEN
NULL;
ELSE
RAISE;
END IF;
END;
Resultado:
PL/SQL procedure successfully completed.
Ejecuté eso a pesar de que el T1
La mesa ya existía. El error ORA-00955 fue detectado y manejado, por lo que no recibimos un mensaje de error y la tabla no se creó.
Si la tabla no hubiera existido ya, se habría creado y veríamos el mismo resultado.