shell動態向sql傳參


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM