jueves, 22 de octubre de 2015

Oracle DataBase - Como eliminar objetos de un Usuario

Hoy les explicaré como eliminar objetos de un determinado tipo, estos pueden ser: 'TABLE', 'VIEW', 'PACKAGE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE', que han sido creados por el usuario que ha iniciado sesión.

Para esto, nos ayudará el siguiente bloque anónimo: 
SET SERVEROUTPUT ON SIZE 1000000
BEGIN
  FOR cur_rec IN (SELECT object_name, object_type
                  FROM   user_objects
                  WHERE  object_type IN ('TABLE', 'VIEW', 'PACKAGE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE')) LOOP
    BEGIN
      IF cur_rec.object_type = 'TABLE' THEN
        EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '" CASCADE CONSTRAINTS';
      ELSE
        EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"';
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.put_line('FAILED: DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"');
    END;
  END LOOP;
END;

Dónde

  • SET SERVEROUTPUT ON SIZE 1000000: Tamaño del buffer en bytes para escribir en el log: DBMS_OUTPUT.put_line
  • object_type IN ('TABLE', 'VIEW', 'PACKAGE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE'): Indicamos los tipos de objetos que vamos a eliminar. 
  • IF cur_rec.object_type = 'TABLE' THEN: Condición para eliminar Objetos de Tipo: TABLE, ya que difiere de la forma de eliminar los demás objetos en: CASCADE CONSTRAINTS, las cuales son palabras reservadas que borran primero todas las Foreing Keys que referencian a la tabla.

Saludos,