Giải pháp được đưa ra bởi @codeforester hoạt động. Tuy nhiên, tôi không thể sử dụng nó vì nó tạo ra nhiều kết nối DB bằng số dòng trong tệp của bạn, điều này có thể gây ra tác động.
Để khắc phục điều này, tôi đã chọn giải pháp dưới đây có thể không lý tưởng nhưng thực hiện công việc chỉ với một kết nối DB.
Xem xét cùng một dữ liệu trong file.txt
12354
13456
13498
Tôi đã sử dụng lệnh sed dưới đây để điền ở trên vào một biến duy nhất "12354,13456,13498"
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
Bây giờ tập lệnh bên dưới sẽ chuyển biến này đến truy vấn SQL và cuộn dữ liệu vào một tệp văn bản:
#!/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
Đầu ra được lưu trữ trong dboutput.txt (cùng với truy vấn SQL)
cat dboutput.txt
SQL> select column1 from table_name where id in (12354,13456,13498);
NAME
---------------------------------------------------------------------------- ----
data1
data2
data3
SQL> spool off