Rozwiązanie podane przez @codeforester działa. Jednak nie mogłem go użyć, ponieważ utworzył tyle połączeń DB, ile jest wierszy w twoim pliku, co może mieć potencjalny wpływ.
Aby temu zaradzić, wybrałem poniższe rozwiązanie, które może nie jest idealne, ale działa tylko z jednym połączeniem DB.
Biorąc pod uwagę te same dane w pliku.txt
12354
13456
13498
Użyłem poniższego polecenia sed, aby wypełnić powyższe do pojedynczej zmiennej „12354,13456,13498”
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
Teraz poniższy skrypt przekaże tę zmienną do zapytania SQL i zbuforuje dane do pliku tekstowego:
#!/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
Wynik jest przechowywany w dboutput.txt (wraz z zapytaniem SQL)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off