在 bash 脚本中循环 sql 查询
Posted
技术标签:
【中文标题】在 bash 脚本中循环 sql 查询【英文标题】:loop sql query in a bash script 【发布时间】:2011-02-01 06:07:14 【问题描述】:我需要使用 bash 循环一个 oracle sqlplus 查询。
我的情况是这样的。我在一个文本文件中有一组名称,我需要使用 sqlplus 查询找出这些名称的详细信息。
textfile.txt 内容:
john
robert
samuel
chris
bash 脚本
#!/bin/bash
while read line
do
/opt/oracle/bin/sqlplus -s user@db/password @query.sql $line
done < /tmp/textfile.txt
sql查询:query.sql
set verify off
set heading off
select customerid from customers where customername like '%&1%';
exit
问题是当我运行脚本时出现类似的错误
SP2-0734:未知命令开始 "robert..." - 其余行被忽略。
谁能告诉我如何解决这个问题?
【问题讨论】:
通常最好执行一个大查询并避免sql循环 确实如此。看起来 OP 正在尝试重新发明保存在文本文件中的存储过程。 【参考方案1】:我一直这样做的方式如下:
#!/bin/bash
cat textfile.txt |while read Name
do
sqlplus -s userid/password@db_name > output.log <<EOF
set verify off
set heading off
select customerid from customers where customername like '%$Name%'
/
exit
EOF
Bash 会自动为每一行神奇地扩展 $Name 并将其放入 sql 命令中,然后再将其发送到 sqlplus
【讨论】:
【参考方案2】:你有set define on
吗?你的通配符是&
吗?您可以查看glogin.sql
了解。
是的,建立n
连接以传递n
查询可能不是一个好的解决方案。也许你的开发速度更快,你会这样做一次,但如果不是,你也许应该考虑制定一个程序。
【讨论】:
以上是关于在 bash 脚本中循环 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何避免作为 sql 查询输出的一部分返回的字符串值被拆分为 bash/shell 脚本中数组中的不同字段