@codeforesterによって提供されるソリューションは機能します。ただし、ファイル内の行数と同じ数のDB接続が作成され、潜在的な影響があるため、使用できませんでした。
これを克服するために、私は以下のソリューションを選択しました。これは理想的ではないかもしれませんが、1つのDB接続だけで機能します。
file.txt内の同じデータを検討する
12354
13456
13498
以下のsedコマンドを使用して、上記を単一の変数「12354,13456,13498」に入力しました
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
以下のスクリプトは、この変数をSQLクエリに渡し、データをテキストファイルにスプールします。
#!/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
出力は(SQLクエリとともに)dboutput.txtに保存されます
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off