zoukankan      html  css  js  c++  java
  • AWK批量处理SQL语句

    需求

    更新表的某个字段,DBA要求一条SQL语句不能超过5000行,且必须主键更新(行锁),且更新完后需要sleep 3秒;
    以前处理这种数据的时候,都是用excel,但是excel处理大量数据的时候可能就会崩溃。。。而且对于某些特定行的处理不是很方便(其实是我菜,不会excel),为了更好的处理数据,

    脚本

    查阅shell资料,憋出了如下awk脚本,命名为awk_data.awk文件,

    BEGIN{
    	printf "update table set is_ok=1 where table_id in (
    "
    }
    
    {
    	if(NR%100 == 0)
    		printf $1");
     select sleep(3);
     update table set is_ok=1 where table_id in (
    "
    	else
    		printf $1",
    "
    }
    
    END{
    	printf ");"
    }
    

    终端中输入

    awk -f awk_data.awk data > temp
    

    得到如下结果

    update table set is_ok=1 where table_id in (
        1,
        2,
        ......
        100);
         select sleep(3);
        ......
        ......
        199999,);
    

    bug

    可以看到,最后一行多出了一个逗号,会导致SQL语法错误。其实解决办法有多种。

    fix bug

    第一种就是判断行号是否是最后一行,如果是最后一行,无需加逗号输出。这种办法很笨,因为AWK不是很好获取最后一行。换一种思路,我们可以将上一行的逗号放到下一行开头输出,这样我们只要判断第一行行首,无需加逗号就行了
    第二种就是手动删除最后的逗号,让语法正确,我是不是很机智。。。
    第三种是在最后END的代码块里一行加一个不存在的主键ID,即

    END{
    	printf "-1);"
    }
    
  • 相关阅读:
    Mybatis初步
    Mybatis的配置文件和映射文件详解
    适配器模式
    工厂模式
    代理模式
    单例模式
    Spring MVC国际化
    SpringMVC的标签库
    SpringMVC文件上传下载和拦截器
    SpringMVC的配置文件
  • 原文地址:https://www.cnblogs.com/boboshenqi/p/10710744.html
Copyright © 2011-2022 走看看