Shell sciptのselect文のファイル入力

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

ハイライトされた部分の入力としてテキストファイルを使用する方法を教えてください。

ベストアンサー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

テストを経ず、誤字などがある場合があります。ご質問があればコメントしてください。

おすすめ記事