sql >> Databasteknik >  >> RDS >> Oracle

Skicka värden som läses från en fil som indata till en SQL-fråga i Oracle

Lösningen som ges av @codeforester fungerar. Men jag kunde inte använda det eftersom det skapade lika många DB-anslutningar som antalet rader i din fil, vilket är en potentiell påverkan.

För att övervinna detta valde jag lösningen nedan som kanske inte är idealisk men som gör jobbet med bara en DB-anslutning.

Med tanke på samma data i file.txt

 12354
 13456
 13498

Jag använde sed-kommandot nedan för att fylla i ovanstående till en enda variabel "12354,13456,13498"

myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")

Nu kommer skriptet nedan att skicka denna variabel till SQL-frågan och spola data till en textfil:

#!/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

Utdata lagras i dboutput.txt (tillsammans med SQL-frågan)

cat dboutput.txt
SQL>   select column1 from table_name where id in (12354,13456,13498);

NAME
----------------------------------------------------------------------------  ----
data1
data2
data3

SQL> spool off


  1. Hur återställer man data från en raderad Docker-behållare? Hur återansluter man den till data?

  2. Hur kan jag fixa det här felet:SQL92 som inte stöds?

  3. SELECT COUNT() vs mysql_num_rows();

  4. Hur konverterar man XMLTYPE till VARCHAR i ORACLE?