sql >> Database >  >> RDS >> Oracle

Geef waarden door die uit een bestand zijn gelezen als invoer voor een SQL-query in Oracle

De oplossing van @codeforester werkt. Ik kon het echter niet gebruiken omdat het evenveel DB-verbindingen creëerde als het aantal regels in uw bestand, wat een potentiële impact heeft.

Om dit te verhelpen, koos ik de onderstaande oplossing, die misschien niet ideaal is, maar het werk doet met slechts één DB-verbinding.

Gezien dezelfde gegevens in file.txt

 12354
 13456
 13498

Ik heb de onderstaande sed-opdracht gebruikt om het bovenstaande in te vullen in een enkele variabele "12354,13456,13498"

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

Het onderstaande script zal deze variabele nu doorgeven aan de SQL-query en de gegevens in een tekstbestand spoolen:

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

De uitvoer wordt opgeslagen in dboutput.txt (samen met de SQL-query)

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

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

SQL> spool off


  1. Bestel een MySQL-tabel met twee kolommen

  2. Row_to_json() gebruiken met geneste joins

  3. MySQL diakritisch ongevoelig zoeken (Spaanse accenten)

  4. Proberen de Oracle-ADF-toepassing te implementeren op Tomcat 7