У меня есть текстовый файл, в котором есть входные данные для оператора выбора.
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 ("значение1", "значение2", ...)
, поэтому требуется некоторая обработка текста.
Во-первых, цитирование:
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
Не тестировалось, поэтому могут быть опечатки и т.д. Пишите, если возникнут проблемы.
очень простой способ выбора из текстового файла,
cat ${DIRECTORY}/UPDATE.txt |
while read acc_id ; do
select acc,cr,dr from count
where acc in ${acc_id};
done
вот и все.