zoukankan      html  css  js  c++  java
  • oracle批量删除某用户下的表

    昨天干了一天的体力活,到快下班时被要求删除一批测试库上错误的表,主要是这些表的字段和生产上字段顺序对不上,然后让我写个脚本,让dba执行一下,主要是删表这种东西我们都没权限.

    然后,我就被难到了,我记得以前都是删一个表啊,还没有批量删过表啊,而且以前删表都是先删除约束再删表的,难道这次让我去把每个表的约束和表名找出来写成一个个删除语句?心想这得加班到明天啊,于是乎网上肯定有oracle的批量删除表脚本吧.

    然后找啊找,找了十多个,要么是脚本本身有错,要么还是不成功,最后发现是我的ip没有权限,不过能用的脚本还是锁定了一个,因为我在另外有删除权限的用户下建了一批表通过这个脚本能删除,

    这个脚本就是

    Begin
      for a in (select * from user_constraints t where t.OWNER = 'PERI' and  upper(t.TABLE_NAME) like 'TEMP_P4%' ) loop
      execute immediate  'alter table '|| a.table_name ||' drop constraint '|| a.constraint_name;
      end loop;
    
      for x in (select * from all_tables t where t.OWNER = 'PERI' and upper(t.TABLE_NAME) like 'TEMP_P4%') loop
    execute immediate 'drop table ' || x.table_name;
      end loop;
    end;

    我上面是删除peri用户下TEMP_P4开头的表,第一个循环删除约束,第二个循环删除表

     

    这个脚本有个缺陷,那就是只能用peri用户登录才能正确执行第一个循环.

    到了今早,就是别人给我指出来这个问题,然后我看他怎么写脚本,然后我就惊讶了

     

    drop table ....;
    drop table ....;
    drop table ....;
    drop table ....;
    drop table ....;
    drop table ....;
    ......

    我说你不用删除约束的吗?

    他说他们以前都只删表就行,不用删约束.

    好吧,这个我还是赚的,至少我知道了在这里怎么批量删除表,也知道了以后去其它地方怎么批量删除表.

  • 相关阅读:
    RHEL7全新初始化进程管理systemd(图形启动和非图形启动切换)
    Linux系统添加硬盘设备(磁盘分区-格式化-挂载-使用)
    linux系统主要常见目录结构
    Linux系统文件访问控制列表
    Linux命令-sudo
    Linux系统文件的隐藏属性
    Linux系统文件权限&目录权限
    Linux系统VIM编辑器
    Linux功能-环境变量
    Linux系统PATH变量配置
  • 原文地址:https://www.cnblogs.com/goujh/p/8567760.html
Copyright © 2011-2022 走看看