将从文件读取的值作为输入传递给 Oracle 中的 SQL 查询

2024-01-17

#cat file.txt
 12354
 13456
 13498

#!/bin/bash
for i in `cat file.txt`
do
    sqlplus XXXXX/XXXXX@DB_NAME << EOF 
        select *from TABLE_NAME where id="$i"
    EOF
done

这对我不起作用。帮助我如何解决这个问题。


@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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将从文件读取的值作为输入传递给 Oracle 中的 SQL 查询 的相关文章

随机推荐