如何在查询的where条件下传递unix变量?

How to pass unix variable in where condition of query?

我有一个文件,我将其文件名存储在 shell 变量中,我希望在 SQL select 查询的 WHERE 条件中传递该变量。我怎样才能做到这一点?

我的代码

cd /path/to/folder
var =$(ls tail)
id_var=$(echo "$var" | cut -f 1 -d '.')
...
...
sqlplus -s user/pwd@db < mysql.sql > output.txt

猫mysql.sql

select * from Records where "GlobalId"='$id_var'

来自

cd /path/to/folder
var =$(ls tail)
id_var=$(echo "$var" | cut -f 1 -d '.')
sqlplus -s user/pwd@db @mysql.sql "${id_var}" > output.txt

然后在mysql.sql中使用&1替换第一个开始参数:

select * from Records where "GlobalId"='&1'

注意:&1是替换变量(而不是绑定变量)所以你需要确保传入的值不执行任何SQL注入攻击。

您可以导出变量 导出 id_var 然后使用 envsubst 命令 envsubst < mysql.sql

这将替换您的变量。