清除指定用户下的所有表,存储过程的脚本,帮看看哪里出错了

applegree 2013-05-02 02:44:24
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
...全文
69 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hh7yx 2013-05-02
你这个只是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;
回复
多壮志 2013-05-02
除了生成还要执行
回复
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2013-05-02 02:44
社区公告
暂无公告