在sql查询中使用类似“%”的字符会在作为shell脚本执行时更改查询

alen0pnh  于 2023-03-13  发布在  Shell
关注(0)|答案(1)|浏览(99)

我是shell脚本的新手,尝试从文本文件中读取员工ID列表,作为我的第一个shell脚本程序的一部分,并将其作为参数传递给另一个shell脚本。在第二个脚本中,我将该参数用于带有类似操作符的SQL选择命令。但我的问题是,该命令作为其他内容执行。
www.example.com的内容first.sh

#!/bin/sh
while IFS= read -r line; 
do
/d/ShellScripts/second.sh  $line
done < "$1"

www.example.com的内容second.sh

#!/bin/sh
EMP_ID=$1
sqlplus -s user/password@//localhost:1521/xepdb1 <<EOF
alter session set current_schema = HR;
set linesize 1000
select * from employees where EMPLOYEE_ID like "\'"%$EMP_ID"\'" ;
select * from employees where EMPLOYEE_ID like %{$EMP_ID} ;
EOF

list.txt的内容

101
102
103

在shell中执行的命令

$ ./first.sh list.txt

Session altered.

"\'"ct * from employees where EMPLOYEE_ID like "\'"%101
                                                   *
ERROR at line 1:
ORA-00911: invalid character

}elect * from employees where EMPLOYEE_ID like %{101
                                               *
ERROR at line 1:
ORA-00911: invalid character

我试图从here获得帮助。我只是试图使用like操作符和shell脚本执行一个普通的SQL查询。

5sxhfpxr

5sxhfpxr1#

在bash脚本中,不需要转义字符的单引号('),只需将变量括在单引号中即可。
您可以second.sh通过以下命令更改www.example.com脚本行

select * from employees where EMPLOYEE_ID like "\'"%$EMP_ID"\'" ;
select * from employees where EMPLOYEE_ID like %{$EMP_ID} ;

select * from employees where EMPLOYEE_ID like '%$EMP_ID' ;

相关问题