首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ksh批处理

ksh批处理
EN

Stack Overflow用户
提问于 2011-02-25 01:27:27
回答 1查看 337关注 0票数 1

我有一个shell脚本,它从文件中逐行读取用户id并将记录插入到数据库中。然而,插入过程很慢,我想通过批处理进行优化。我不能将整个文件作为一批使用,因为事务大小超过了专有限制。下面是脚本:

代码语言:javascript
复制
for user in `cat $userlist`
do 
echo "processing user $user"
{
    echo "begin"
        i=1
        while [[ $i -le 30 ]] ; do
        echo "insert into usertab values ($user,-1,\"\",-1)" 
        i=$(expr $i + 1)
        done
        echo "commit"
} | propSql userDb -
done

Begin和commit是这个数据库的标准关键字。在这里,我希望一次处理10个用户,而不是一次处理一个用户。有人能建议所需的改变吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-25 03:47:41

这显示了一种一次累积10个用户的方法。您需要修改它以适应查找insert语句所需数据的方式。我保留了内部循环,但将其更改为for循环,因为这使得所有的控制都发生在一个地方。不过,您可能不需要该循环。

代码语言:javascript
复制
process () {
   # Somewhere in here you'll use the value of "$@"
   echo "begin"
        # you may not need this loop any more
        for ((i=1; i<30; i++))
        do
            echo "insert into usertab values ($user,-1,\"\",-1)" 
        done
    echo "commit"
}

j=0
while read -r user
do 
    echo "processing user $user"
    if ! (( j++ % 10 ))    # every tenth user, do a database operation
    then
        process "$accum" | propSql userDb -
        accum=""
    fi
    accum+=" $user"    # accumulate user names
done < "$userlist"
process "$accum" | propSql userDb -    # one more time to get the remainder

请注意,这是使用ksh93语法编写的。如果你使用的是另一个版本,你需要做一些修改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5108207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档