La soluzione fornita da @codeforester funziona. Tuttavia non sono stato in grado di usarlo perché ha creato tante connessioni DB quante sono le righe nel tuo file, il che è un potenziale impatto.
Per ovviare a questo, ho scelto la soluzione seguente che potrebbe non essere l'ideale ma fa il lavoro con una sola connessione DB.
Considerando gli stessi dati in file.txt
12354
13456
13498
Ho usato il comando sed di seguito per popolare quanto sopra in una singola variabile "12354,13456,13498"
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
Ora sotto lo script passerà questa variabile alla query SQL e spoolerà i dati in un file di testo:
#!/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
L'output è archiviato in dboutput.txt (insieme alla query SQL)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off