sql >> Base de Datos >  >> RDS >> Oracle

Pasar valores leídos de un archivo como entrada a una consulta SQL en Oracle

La solución dada por @codeforester funciona. Sin embargo, no pude usarlo porque creó tantas conexiones de base de datos como el número de líneas en su archivo, lo que es un impacto potencial.

Para superar esto, elegí la siguiente solución que puede no ser ideal pero hace el trabajo con solo una conexión DB.

Considerando los mismos datos en archivo.txt

 12354
 13456
 13498

Utilicé el siguiente comando sed para completar lo anterior con una sola variable "12354,13456,13498"

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

Ahora, el siguiente script pasará esta variable a la consulta SQL y colocará los datos en un archivo de texto:

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

La salida se almacena en dboutput.txt (junto con la consulta SQL)

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

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

SQL> spool off