Oracle
 sql >> Database >  >> RDS >> Oracle

Passa i valori letti da un file come input a una query SQL in Oracle

La soluzione fornita da @codeforester funziona. Tuttavia non sono stato in grado di usarlo perché ha creato tante connessioni DB quante sono le righe nel tuo file, il che è un potenziale impatto.

Per ovviare a questo, ho scelto la soluzione seguente che potrebbe non essere l'ideale ma fa il lavoro con una sola connessione DB.

Considerando gli stessi dati in file.txt

 12354
 13456
 13498

Ho usato il comando sed di seguito per popolare quanto sopra in una singola variabile "12354,13456,13498"

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

Ora sotto lo script passerà questa variabile alla query SQL e spoolerà i dati in un file di testo:

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

L'output è archiviato in dboutput.txt (insieme alla query SQL)

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

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

SQL> spool off