2011-08-25 112 views
1

我是新來的bash腳本,我想知道是否有人可以幫我以下。在Bash腳本中循環SQL查詢

我試圖用competition_id使用下面的語句檢索從Oracle數據庫競爭名稱:

選擇名稱,competition_type從那裏competition_id =」「比賽;

但是我想使用一個單獨的文本文件,它有一個我想要識別的competition_ids列表,我希望我的腳本找到所有我的ID的名稱和類型,並將結果輸出到一個txt文件中。這是我到目前爲止有:

#!/bin/bash  

echo Start Executing SQL commands 
cat comps_ids.txt | while read ID 
var=$ID 
do 
sqlplus "details" 

<< EOF 
select name, competition_type 
from competitions 
where competition_id=$var; 
exit; 
EOF 

我想在結尾處加上一個做,但我得到錯誤信息「意外的結束行」。有誰能解決這個問題嗎

很多感謝:)

回答

1

我不知道你的命令行應該是什麼樣子,但它更像

sqlplus "details" <<EOF 
select name, competition_type from competitions where competition_id=$val; 
exit; 
EOF 

如果你的ID的列表不是太大,做一個,分隔列表和單個查詢可能是更好的主意。

1
#!/bin/bash 

function get_comp() { 
    sqlplus -S user/[email protected] << EOF 
    set pagesize 0 
    set feedback off 
    set head off 
    select name, competition_type 
     from competitions 
     where competition_id=$1; 
EOF 
} 

for id in $* ; do 
    get_comp $id 
done 

把它放在一個文件(get_comps.sh),然後調用它像這樣

$ ./get_comps.sh <comp_ids.txt> text_file_out.txt 

-S使得sqlplus的安靜

其他設置,使其只返回你的數據,而不是行標題或其他任何東西。

當然,數據庫憑證將存儲在您的歷史記錄中,並可供其他用戶使用'ps'或'top'。

這也是非常低效的,因爲它連接到原始文件中每行的數據庫。如果你有很多行,你可以嘗試使用python或ruby,因爲他們的數據庫的東西很容易使用。