一直在想有什么好方法可以實現,用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