De oplossing van @codeforester werkt. Ik kon het echter niet gebruiken omdat het evenveel DB-verbindingen creëerde als het aantal regels in uw bestand, wat een potentiële impact heeft.
Om dit te verhelpen, koos ik de onderstaande oplossing, die misschien niet ideaal is, maar het werk doet met slechts één DB-verbinding.
Gezien dezelfde gegevens in file.txt
12354
13456
13498
Ik heb de onderstaande sed-opdracht gebruikt om het bovenstaande in te vullen in een enkele variabele "12354,13456,13498"
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
Het onderstaande script zal deze variabele nu doorgeven aan de SQL-query en de gegevens in een tekstbestand spoolen:
#!/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
De uitvoer wordt opgeslagen in dboutput.txt (samen met de SQL-query)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off