zoukankan      html  css  js  c++  java
  • Java/sql找出oracle数据库有空格的列

    1.java方式

    String table_sql = "select table_name from user_tables";//所有用户表 
    List<String> table_list = getSession().createSQLQuery(table_sql).list();
    for (int index = 0; index < table_list.size(); index++) {
       String tab = table_list.get(index);
       System.out.println("表名 "+tab);
       //表的所有列及数据类型
       String column_sql = "select column_name,data_type,data_length from user_tab_columns where table_name=upper('"+tab+"')";
       List<Object[]> column_list = getSession().createSQLQuery(column_sql).list();
       for (int j = 0; j < column_list.size(); j++) {
        String column = (String)column_list.get(j)[0];//列名
        //String dataType = (String)column_list.get(j)[1];//数据类型
        //查询是否有空格
        String checkColumn_sql = "select count(rownum) from "+tab+" where "+column+" like ' %' or "+column+" like '% ' and rownum<10 ";
        BigDecimal count = (BigDecimal)getSession().createSQLQuery(checkColumn_sql).uniqueResult();
        Integer num = count.intValue();
        if(num > 0){
         //System.out.println("列名 "+column+" 数据类型 "+dataType+" 含空格数量 "+num);
         System.out.println("update "+tab+" set "+column+" = trim("+column+") where "+column+" like ' %' or "+column+" like '% ';");
        }
     }
     System.out.println("======================================");

    2.sql方式

    declare
    v_fid varchar2(1000);--用来存在表名的变量
    cursor c_cur is select table_name from user_tables;--获得所有的用户表名(如果表多或数据量大可以加where条件)
    cursor c_tab(c_cur varchar2) is select column_name from user_tab_columns where table_name=c_cur;--获得对应表的所有列名
    v_column user_tab_columns.column_name%type;
    v_sql varchar2(1000);
    v_count varchar2(100);
    begin   
      open c_cur; 
         loop 
           fetch c_cur into v_fid; 
           exit when c_cur%notfound; 
           dbms_output.put_line('========');
           dbms_output.put_line('表名:'||v_fid);
           
           open c_tab(v_fid);
             loop
               fetch c_tab into v_column;
               exit when c_tab%notfound;
                 
                 v_sql:='select count(rownum) from '||v_fid||' where '||v_column||' like '' %'' or '||v_column||' like ''% '' and rownum<10 ';
                 execute immediate v_sql into v_count;
    
                 if v_count > 0 then
                  begin 
                   dbms_output.put_line(v_column);--输出列名   
                  end;
                end if;  
             end loop;
           close c_tab;
           
         end loop; 
       close c_cur; 
    end;
  • 相关阅读:
    [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)
    [转]最常用的商务职场英语邮件100个句式
    [转]玩转Angular2(4)--制作左侧自动定位菜单
    [转]Angular开发(十八)-路由的基本认识
    Consul之:服务注册与发现
    Consul之:key/value存储
    服务容错保护断路器Hystrix之六:服务熔断和服务降级
    延时队列:Java中的DelayQueue
    分布式延迟消息队列实现分析与设计
    基于redis的延迟消息队列设计
  • 原文地址:https://www.cnblogs.com/songfei90/p/10646986.html
Copyright © 2011-2022 走看看