Bash脚本中的循环SQL查询
我是bash脚本新手,我想知道是否有人可以在以下方面帮助我 我正在尝试使用competition_id从Oracle数据库中检索竞赛名称,使用以下语句: 从竞赛id为“”的竞赛中选择名称、竞赛类型 然而,我想使用一个单独的文本文件,其中有一个我想要识别的ID列表,我想让我的脚本找到我所有ID的名称和类型,并将结果输出到一个txt文件中。这就是我到目前为止所做的: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
#!/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,因为它们的数据库非常容易使用