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
ハイライトされた部分の入力としてテキストファイルを使用する方法を教えてください。
答え1
まず、ファイルを配列に読み込みます。
以下は、1行の値を含むファイルです。
read -ar values < "$DIRECTORY"/acc.txt
複数行ファイルの場合はループを使用します(1行に1つの値)。
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
テストを経ず、誤字などがある場合があります。ご質問があればコメントしてください。
答え2
テキストファイルから選択する非常に簡単な方法は次のとおりです。
cat ${DIRECTORY}/UPDATE.txt |
while read acc_id ; do
select acc,cr,dr from count
where acc in ${acc_id};
done
それはすべてです。