A solução dada pelo @codeforester funciona. No entanto, não consegui usá-lo porque ele criou tantas conexões de banco de dados quanto o número de linhas em seu arquivo, o que é um impacto potencial.
Para superar isso, escolhi a solução abaixo, que pode não ser a ideal, mas funciona com apenas uma conexão de banco de dados.
Considerando os mesmos dados em file.txt
12354
13456
13498
Eu usei o comando sed abaixo para preencher o acima para uma única variável "12354,13456,13498"
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
Agora, o script abaixo passará essa variável para a consulta SQL e colocará os dados em um arquivo de texto:
#!/bin/bash
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
echo @myvariable
sqlplus /nolog << EOF
CONNECT [email protected]/dbpassword
SPOOL dboutput.txt
select column1 from table_name where id in ($myvariable);
SPOOL OFF
EOF
A saída é armazenada em dboutput.txt (junto com a consulta SQL)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off