我是bash脚本的新手,我想知道是否有人可以帮我解决以下问题。
我正在尝试使用match_id从Oracle数据库中使用以下语句检索竞争名称:
从比赛中选择名称,competition_type,其中competition_id ='';
但是我想使用一个单独的文本文件,它有一个我要识别的list_ids列表,我希望我的脚本找到所有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
我尝试在最后添加一个完成但我得到“意外的行结束”错误消息。任何人都可以解决这个问题吗?
非常感谢提前:)
答案 0 :(得分:1)
我不确定你的命令行应该是什么样的,但它更像是
sqlplus "details" <<EOF
select name, competition_type from competitions where competition_id=$val;
exit;
EOF
如果您的ID列表不是太大,最好制作一个,
- 分隔列表和单个查询。
答案 1 :(得分:1)
#!/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,因为他们的数据库东西很容易使用。