Shell-Script
shell scipt 中 select 語句的文件輸入
我有一個文本文件,其中包含 select 語句的輸入。
sqlplus -s $USERNAME/$PASSWORD@$HOST<<EOF spool $DIRECTORY/UPDATE.xls select acc,cr,dr from count where acc in ***$DIRECTORY/acc.txt***; spool off; exit EOF
請讓我知道如何在突出顯示的部分使用文本文件作為輸入。
首先,將文件讀入一個數組。
這是針對在一行中包含值的文件:
read -ar values < "$DIRECTORY"/acc.txt
對於多行文件,使用循環(每行一個值):
while read -r v; do values+=("$v") done < <(cat "$DIRECTORY"/acc.txt)
根據 Archemar 的評論,SQL 語法是
var in ( "value1", "value2", ... )
,所以需要一些文本處理。首先,引用:
for i in "${values[@]}"; do quoted_values+=(\""$i"\"); done
二、用逗號和空格分隔:
limit="${#quoted_values[@]}" for ((i=0; i<"$limit"; i++ )); do values_string="$values_string""${quoted_values[$i]}" ((limit-i-1)) && values_string="$values_string", values_string="$values_string"" " done
值列表周圍的括號將出現在此處的文件中。
sqlplus -s "$USERNAME"/"$PASSWORD"@"$HOST"<<EOF spool "$DIRECTORY"/UPDATE.xls select acc,cr,dr from count where acc in ( "$values_string" ); spool off; exit EOF
未經測試,因此可能存在拼寫錯誤等。如果您有問題,請發表評論。