/*Процедура предназначена для быстрого удаления всех таблиц и других объектов из TABLESPACE
 'USERS' всех пользователей .
  Это бывает нужно для полной дефрагментации базы, переориентации её использования и т.д. 
   Из практики:  возможно прийдётся запустить процедуру несколько раз */
    

DECLARE 
CURSOR  user_tbl IS SELECT  table_name FROM  dba_tables WHERE  tablespace_name='USERS';
row_user_tbl user_tbl%rowtype;

CURSOR  user_obj IS SELECT object_type, object_name FROM DBA_OBJECTS 
WHERE owner IN ('ASSETS','UBTC','SALARY','TOAD')
  AND object_type IN ('FUNCTION','PROCEDURE','SEQUENCE','VIEW','PACKAGE','PACKAGE BODY');
v_cursor number;
      -- Уничтожаем все пользовательские таблицы
BEGIN 
v_cursor:=DBMS_SQL.open_cursor;
  FOR  row_user_tbl IN  user_tbl LOOP
   begin
     DBMS_SQL.parse(v_cursor,'DROP TABLE '||row_user_tbl.table_name||' 
                                            CASCADE CONSTRAINTS',dbms_sql.v7);
     COMMIT;
     EXCEPTION WHEN  others 
        THEN  DBMS_OUTPUT.PUT_LINE( 'Не удалилась таблица '||row_user_tbl.table_name);
   end;   
  END LOOP;
      -- Уничтожаем все остальные пользовательские объекты
  FOR row_user_obj IN user_obj LOOP
   begin
     DBMS_SQL.parse(v_cursor,'DROP '||row_user_obj.object_type||' '||row_user_obj.object_name, dbms_sql.v7);
	DBMS_OUTPUT.PUT_LINE( 'Удален - '||row_user_obj.object_type||' '||row_user_obj.object_name);
	EXCEPTION WHEN  others 
        THEN  DBMS_OUTPUT.PUT_LINE( 'Не удалился - '||row_user_obj.object_type||' '||row_user_obj.object_name);
   end;   
  END LOOP;

DBMS_SQL.CLOSE_CURSOR(v_cursor);
END;

spool del_users.lst set serveroutput on DECLARE /* Процедура предназначена для удаления всех пользователей со всеми их объектами. Нужно запустить от SYS. */ CURSOR user_cur IS SELECT * FROM all_users WHERE username <>'SYS' and username <>'SYSTEM'; row_user user_cur%rowtype; v_cursor number; BEGIN v_cursor:=DBMS_SQL.open_cursor; FOR row_user IN user_cur LOOP begin DBMS_SQL.parse(v_cursor,'DROP USER '||row_user.username ||' CASCADE',dbms_sql.v7); COMMIT; EXCEPTION WHEN others THEN DBMS_OUTPUT.PUT_LINE( 'ups..'||row_user.username); END; END LOOP; DBMS_SQL.CLOSE_CURSOR(v_cursor); end; / . exit;
Хостинг от uCoz