日期:2014-05-17  浏览次数:20735 次

清除指定用户下的所有表,存储过程的脚本,帮看看哪里出错了
java.runtime调用下面的脚本清除用户下面的所有表,存储过程等内容,但是没有效果,请帮看看那里出错了
网上找的例子,自己改了下



#!bin/sh
 
su - oracle
sqlplus /nolog
conn usr/pwd <<EOF
set heading off;
set feedback off;
spool /oraclebak/dropobj.sql;
select 'Drop table '||table_name||' cascade constraints;' from   all_tables  where owner='usr';
select 'drop view ' || view_name||' cascade constraints;'||chr(13)||chr(10) from all_views  where owner='usr';
select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from all_sequences where sequence_owner='usr';
select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from all_objects where object_type='PROCEDURE' and owner='usr';
select 'drop package ' || object_name||';'||chr(13)||chr(10) from all_objects where object_type='PACKAGE' and owner='usr';
spool off;
set heading on;
set feedback on;
EOF

------解决方案--------------------
除了生成还要执行
------解决方案--------------------
你这个只是select 出来drop脚本,又没执行。。还得再调用一次dropobj.sql。

下面这个脚本应该也可以吧:

DECLARE
  V_SQL varchar2(200);
BEGIN
  for del in (select t.OBJECT_TYPE,t.OBJECT_NAME from dba_objects t where t.OWNER = 'HH7YX') LOOP
    begin
      V_SQL := 'drop ' 
------解决方案--------------------
 del.object_type 
------解决方案--------------------
 ' ' 
------解决方案--------------------
 del.object_name 
------解决方案--------------------
 ';';
      dbms_output.put_line(V_SQL);
      EXECUTE IMMEDIATE V_SQL;  
    exception
      when others then
        null;
        --dbms_output.put_line(sqlerrm);
    end;
  END LOOP;
END;