Lösningen som ges av @codeforester fungerar. Men jag kunde inte använda det eftersom det skapade lika många DB-anslutningar som antalet rader i din fil, vilket är en potentiell påverkan.
För att övervinna detta valde jag lösningen nedan som kanske inte är idealisk men som gör jobbet med bara en DB-anslutning.
Med tanke på samma data i file.txt
12354
13456
13498
Jag använde sed-kommandot nedan för att fylla i ovanstående till en enda variabel "12354,13456,13498"
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
Nu kommer skriptet nedan att skicka denna variabel till SQL-frågan och spola data till en textfil:
#!/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
Utdata lagras i dboutput.txt (tillsammans med SQL-frågan)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off