Die Lösung von @codeforester funktioniert. Ich konnte es jedoch nicht verwenden, da es so viele DB-Verbindungen erstellte wie die Anzahl der Zeilen in Ihrer Datei, was eine potenzielle Auswirkung darstellt.
Um dies zu überwinden, habe ich die folgende Lösung gewählt, die vielleicht nicht ideal ist, aber mit nur einer DB-Verbindung funktioniert.
Unter Berücksichtigung der gleichen Daten in file.txt
12354
13456
13498
Ich habe den folgenden sed-Befehl verwendet, um das Obige in eine einzelne Variable "12354,13456,13498"
zu füllenmyvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
Das folgende Skript übergibt diese Variable nun an die SQL-Abfrage und spoolt die Daten in eine Textdatei:
#!/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
Die Ausgabe wird in dboutput.txt gespeichert (zusammen mit der SQL-Abfrage)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off