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;
  • 相关阅读:
    JAVA SkipList 跳表 的原理和使用例子
    TreeMap、HashMap、ConcurrentSkipListMap之性能比较
    CompletionService 和ExecutorService的区别和用法
    1. java.util.concurrent
    JAVA Concurrent包 中的并发集合类
    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
    Objective-C中 ==、isEqual、isEqualToString判断字符串相等
    设置UIButton的文字显示位置、字体的大小、字体的颜色
    9个完整android开源app项目
    android 开源项目集合
  • 原文地址:https://www.cnblogs.com/songfei90/p/10646986.html
Copyright © 2011-2022 走看看