• 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 ....;
    ......

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

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

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

  • 相关阅读:
    Linux如何开启mysql版本
    解决Centos7安装nginx后提示“Welcome to nginx on Fedora!”,conf.d目录下无default.conf文件
    如何屏蔽root用户(禁止以root用户登陆)的方法
    Linux修改文件时候,产生了一个.swap交换文件,如何删除
    Linux私钥公钥对认证身份,实现免密登陆
    Linux7/Centos7破解root用户密码
    Linux常用命令
    oracle 触发器 dblink
    phoenix sql语句优化
    如何在服务器端获取客户端的数据
  • 原文地址:https://www.cnblogs.com/goujh/p/8567760.html
Copyright © 2020-2023  润新知