Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Übergeben Sie aus einer Datei gelesene Werte als Eingabe an eine SQL-Abfrage in Oracle

Die Lösung von @codeforester funktioniert. Ich konnte es jedoch nicht verwenden, da es so viele DB-Verbindungen erstellte wie die Anzahl der Zeilen in Ihrer Datei, was eine potenzielle Auswirkung darstellt.

Um dies zu überwinden, habe ich die folgende Lösung gewählt, die vielleicht nicht ideal ist, aber mit nur einer DB-Verbindung funktioniert.

Unter Berücksichtigung der gleichen Daten in file.txt

 12354
 13456
 13498

Ich habe den folgenden sed-Befehl verwendet, um das Obige in eine einzelne Variable "12354,13456,13498"

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

Das folgende Skript übergibt diese Variable nun an die SQL-Abfrage und spoolt die Daten in eine Textdatei:

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

Die Ausgabe wird in dboutput.txt gespeichert (zusammen mit der SQL-Abfrage)

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

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

SQL> spool off