Løsningen givet af @codeforester virker. Jeg kunne dog ikke bruge det, fordi det skabte lige så mange DB-forbindelser som antallet af linjer i din fil, hvilket er en potentiel indvirkning.
For at overvinde dette valgte jeg nedenstående løsning, som måske ikke er ideel, men som klarer opgaven med kun én DB-forbindelse.
Overvejer de samme data i file.txt
12354
13456
13498
Jeg brugte nedenstående sed-kommando til at udfylde ovenstående til en enkelt variabel "12354,13456,13498"
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
Nedenstående script vil nu sende denne variabel til SQL-forespørgslen og spoole dataene til en tekstfil:
#!/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
Outputtet gemmes i dboutput.txt (sammen med SQL-forespørgslen)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off