@codeforester 给出的解决方案有效。但是我无法使用它,因为它创建了与文件中的行数一样多的数据库连接,这是一个潜在的影响。
为了克服这一问题,我选择了以下解决方案,该解决方案可能并不理想,但只需一个数据库连接即可完成工作。
考虑 file.txt 中的相同数据
12354
13456
13498
我使用下面的 sed 命令将上面的内容填充到单个变量“12354,13456,13498”
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
现在下面的脚本会将此变量传递给 SQL 查询并将数据假脱机到文本文件中:
#!/bin/bash
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
echo @myvariable
sqlplus /nolog << EOF
CONNECT user@dbname/dbpassword
SPOOL dboutput.txt
select column1 from table_name where id in ($myvariable);
SPOOL OFF
EOF
输出存储在 dboutput.txt 中(以及 SQL 查询)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off