我在 sql 语句中使用 shell 变量,并且该变量是字符串类型。如果我执行下面的脚本,我得到的输出是“未选择行”,但是当我在 sql 提示符中执行相同的选择查询时,我得到了正确的输出。即使我尝试在脚本中用“os”替换 $var,但仍然没有得到所需的输出
var="os"
user="system"
pass="2451"
ou=$(sqlplus -s $user/$pass <<EOF
select login,subject from timetable where subject=$var;
exit;
EOF
)
echo $ou
答案1
在这种情况下执行的语句将是:
select login,subject from timetable where subject=os;
它将行主题与不存在的(不存在/系统)变量“os”进行比较。
您必须根据所使用的 dbms 添加括号,如下所示:
select login,subject from timetable where subject=\'$var\';