Bash脚本中的循环SQL查询

Bash脚本中的循环SQL查询,sql,bash,shell,Sql,Bash,Shell,我是bash脚本新手,我想知道是否有人可以在以下方面帮助我 我正在尝试使用competition_id从Oracle数据库中检索竞赛名称,使用以下语句: 从竞赛id为“”的竞赛中选择名称、竞赛类型 然而,我想使用一个单独的文本文件,其中有一个我想要识别的ID列表,我想让我的脚本找到我所有ID的名称和类型,并将结果输出到一个txt文件中。这就是我到目前为止所做的: #!/bin/bash echo Start Executing SQL commands cat comps_id

我是bash脚本新手,我想知道是否有人可以在以下方面帮助我

我正在尝试使用competition_id从Oracle数据库中检索竞赛名称,使用以下语句:

从竞赛id为“”的竞赛中选择名称、竞赛类型

然而,我想使用一个单独的文本文件,其中有一个我想要识别的ID列表,我想让我的脚本找到我所有ID的名称和类型,并将结果输出到一个txt文件中。这就是我到目前为止所做的:

 #!/bin/bash     

 echo Start Executing SQL commands
 cat comps_ids.txt | while read ID 
 var=$ID
 do 
sqlplus "details"

<<  EOF
select name, competition_type 
from competitions 
where competition_id=$var;
exit;
EOF
我试图在结尾添加“完成”,但收到意外的行尾错误消息。谁能解决这个问题


非常感谢:

我不确定您的命令行应该是什么样子,但它更像

sqlplus "details" <<EOF
select name, competition_type from competitions where competition_id=$val;
exit;
EOF
如果您的ID列表不太大,最好创建一个,-分隔的列表和单个查询

#!/bin/bash

function get_comp () {
    sqlplus -S user/pass@database << EOF
    set pagesize 0
    set feedback off
    set head off
    select name, competition_type 
        from competitions 
        where competition_id=$1;
EOF
}

for id in $* ; do
    get_comp $id
done
把它放在一个文件get_comps.sh中,然后像这样调用它

$ ./get_comps.sh < comp_ids.txt > text_file_out.txt
-S使sqlplus更安静

另一个设置使其仅返回数据,而不是行标题或其他任何内容

当然,数据库凭据将存储在您的历史记录中,并可供使用“ps”或“top”的其他用户使用

这也是非常低效的,因为它连接到原始文件中每一行的数据库。如果有很多行,可以尝试使用python或ruby,因为它们的数据库非常容易使用