一直在想有什么好方法可以实现,用shell动态给sql传参,自己写了一个简单,有什么好方法,欢迎留言补充,下面代码纯手打,可能有疏忽之处,请大佬批评指正指正。
实现方法如下:
1.新建一个文件02.txt,文件里按行填写参数,文件内容如下
sys$ cat 02.txt
1
2
3
2.新建一个sh连接数据库并进行参数传递,用for循环进行参数轮询,代码如下:
sys$ cat 6.sh
#!/bin/bash
for line in `cat 02.txt`
do
sqlplus -S /nolog > result.log<<EOF1 --连接数据库
set line 2000 pagesize0 echo off termout off heading off trims on term off trimout on; --设置sql输出参数
conn scott/123\$abc@22.123.45.33:1521/majr ----连接数据库 scott是数据库用户名,123\$abc是密码,特殊字符需要\转义,22.123.45.33:1521指数据库ip和数据库端口默认都是1521,majr指连接的数据名。
spool '/home/view/work/sh/tmp/31.txt'; --指定输出文件路径及文件名
select $line from dual;--sql语句,也可以用@路径\sql 的方式来执行sql文件(但是测试不可以动态传参,有知道怎么解决的朋友吗?)
exit
EOF1
cat 31.txt>>32.txt --因为生成的31.txt文件会被覆盖,所以需要这一步来将结果自动追加到32.txt 文件里。
done
3、先给脚本赋予权限 chmod 755 6.sh 然后执行 ./6.sh ,然后查看执行结果
sys$ cat 6.sh
1
2
3
4.可以看到执行的结果里有空行,可以用sed命令来去除空行:
sed -i '/^$/d' 32.txt
5、再次查看结果
sys$ cat 32.txt
1
2
3
凝视深渊,深渊也在凝视你。