Hay 2 maneras. La fácil:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE T1';
EXECUTE IMMEDIATE 'DROP TABLE T2';
EXCEPTION WHEN OTHERS THEN NULL;
END;
Y limpia y dicicil:
El siguiente código comprueba si la tabla existe y si es así la borra:
DECLARE
cnt number :=0;
BEGIN
--Comprobamos si existe la tabla en nuestra cuenta
select count(*) into cnt from all_tables
where table_name = 'TABLENAME_OINK_OINK'
and owner=('OWNERNAME');
--En caso de existir la tabla la borramos
if cnt>0 then
execute immediate 'drop table TABLENAME_OINK_OINK';
end if;
--Creamos la tabla nuevamente
execute immediate 'CREATE TABLE TABLENAME_OINK_OINK(
pid varchar2(25)
)';
--Insertamos los datos en la tabla (usamos execute immediate para que no compruebe si la tabla existe)
EXECUTE IMMEDIATE 'INSERT INTO TABLENAME_OINK_OINK (PID) VALUES (''EHEM, EHEM, EHEM'')';
EXECUTE IMMEDIATE 'INSERT INTO TABLENAME_OINK_OINK (PID) VALUEs (''JA, JA, JA, JA'')';
COMMIT;
END;
Si la tabla que queremos borrar existe en varias bases de datos podemos decir que queremos borrar solo la de nuestra cuenta haciendo (modificando el código podemos hacer que borre el de una cuenta (por cuenta se entiende base de datos) en concreto):
select count(*) into cnt from all_tables
where table_name = 'tablename' and owner in (
SELECT user
FROM gv$session
WHERE sid = (SELECT sid FROM gv$mystat WHERE rownum = 1));
if cnt = 1 then
execute immediate'drop table tablename';
end if;
Borrar tabla mirando antes si existe
Etiquetas: Oracle