--Program : drops.sql --Purpose : To find and drop a list of user tables that match a given criteria --Usage : SQL>@drops --Notes : Prompts for a string and then searches all objects name to be dropped.The default option is to drop all tables. -- It then searches and displays the selected objects and then prompts for a confirmation which defaults to a 'No'. -- The script generates a number of files, thus it is important that the user must have a write privilege to the -- current directory.The files are as follows -- -- Drops Command File: DROP_UserName_ObjectName_SessionIDSystemDateTime.sql -- Drops Log File: DROP_UserName_ObjectName_SessionIDSystemDateTime.dropslog -- Temp Drops File: drops1.sql -- deleted at the end -- Temp Drops File: drops2.sql -- deleted at the end -- SQL*Plus Env File: drops.saveset -- deleted at the end -- --Example : SQL>@drops -- Enter Table Name To Drop [ALL]: EMP -- will drop all tables with names containing the expression 'EMP' --Author : Ram Razdan , ramrazdan@yahoo.com --License : Free for public use, amendment and distribution. -- Please refer https://ramrazdan.tripod.com/termsofuse.txt for full details. --Revision : Version Date Server/OS Comments -- 1.0 Dec,1997 Oracle7.1/VM-CMS Initial Revision. -- 1.1 Aug,1998 Oracle7.3/SunOS Prompt for confirmation and clean up temp files at the end. -- 2.0 Apr,2001 Oracle8.1/Win98 Extend the ability to drop all types objects (initial versions -- worked only on tables. Also provide logging ability and the -- option to generate a unique command file which may be stored for -- later use. -- SET ECHO OFF --STORE SET saveset SET PAGESIZE 0 FEEDBACK OFF HEADING OFF TERMOUT ON VERIFY OFF LINESIZE 132 UNDEFINE v_object_name ACCEPT v_object_name CHAR PROMPT 'Enter Object Name To Drop [ALL]:' VARIABLE v_drops_cmd_file_name VARCHAR2(256) -- drop command filename DROP_$LESSUSERNAME_ObjectSearchString_SessionIDSystemDateTime -- example DROP_OPS_RRAZDAN_EMP_12345620010501230101.sql BEGIN :v_drops_cmd_file_name := 'DROP_'|| TRANSLATE(USER,'$','_')||'_'|| NVL(TRANSLATE('&v_object_name' ,'%?¬!"£$^&*()-+={}[]:;@''~#|\/?,.<> ``' ,'__' -- strip everything except %? which are translated to _ ) ,'ALL' )||'_'|| USERENV('SESSIONID')|| TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'); END; / SET SERVEROUTPUT ON EXECUTE DBMS_OUTPUT.PUT_LINE(:v_drops_cmd_file_name||'.sql'); SET SERVEROUTPUT OFF SET TERMOUT OFF SPOOL drops1.sql SELECT 'SPOOL '||:v_drops_cmd_file_name||'.sql' FROM DUAL ; SPOOL OFF SET TERMOUT ON @drops1 SELECT 'REM MULTIPLE OBJECTS DROP FILE CREATED FILE BY USER '||USER|| ', UID '||UID||', SESSIONID '||USERENV('SESSIONID')||' AT '||TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS') FROM DUAL ; SELECT 'SPOOL '||:v_drops_cmd_file_name||'.dropslog' FROM DUAL UNION ALL SELECT 'SHOW USER' FROM DUAL UNION ALL SELECT 'STORE SET drops.saveset' FROM V$VERSION WHERE ROWNUM = 1 AND INSTR(BANNER,'Release 8.') > 0 UNION ALL SELECT 'SET ECHO ON TIME ON TIMING ON FEEDBACK ON FEEDBACK 1 HEADING ON PAUSE OFF' FROM DUAL ; SELECT 'DROP '||RPAD(object_type,18,' ')||' '||object_name||';' FROM USER_OBJECTS WHERE object_name LIKE UPPER('%&v_object_name%') ORDER BY object_type -- may be removed if performance is being hit. ; SELECT 'SET ECHO OFF TIME OFF TIMING OFF FEEDBACK ON FEEDBACK 5 HEADING ON PAUSE OFF' FROM DUAL UNION ALL SELECT '@@drops.saveset' FROM V$VERSION WHERE ROWNUM = 1 AND INSTR(BANNER,'Release 8.') > 0 UNION ALL SELECT 'SPOOL OFF' FROM DUAL ; SPOOL OFF --SET TERMOUT ON --SELECT RPAD(object_type,19,' ')||RPAD(object_name,30,' ')||'...Selected to drop.' -- FROM USER_OBJECTS -- WHERE object_name LIKE UPPER('%&v_object_name%') --; SELECT TO_CHAR(COUNT(*))||' Objects will be dropped.' FROM USER_OBJECTS WHERE object_name LIKE UPPER('%&v_object_name%') ; ACCEPT v_yn CHAR PROMPT 'Confirm Drop (Y|[N]) ?' SET TERMOUT OFF SPOOL drops2.sql SELECT DECODE('&v_yn' ,'Y','@drops1.sql' ,'N','SET ECHO OFF' ,NULL,'SET ECHO OFF' ,'SET ECHO OFF') FROM SYS.DUAL ; SPOOL OFF @drops2.sql SET TERMOUT ON SELECT DECODE('&v_yn' ,'Y','Selected Objects(s) Dropped.' ,'N','Selected Objects(s) Not Dropped' ,NULL,'Selected Objects(s) Not Dropped' ,'Selected Objects(s) Not Dropped') FROM SYS.DUAL ; SET PAGESIZE 50 FEEDBACK ON FEEDBACK 5 HEADING ON ECHO OFF TERMOUT ON LINESIZE 132 --The following code is optional and OS dependent --Use rm to remove temp files on UNIX --HO rm drops1.sql --HO rm drops2.sql --HO rm drops.saveset --Use erase/del to remove temp files on Windows HO del drops1.sql HO del drops2.sql HO del drops.saveset