Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Passar valores lidos de um arquivo como entrada para uma consulta SQL no Oracle


A solução dada pelo @codeforester funciona. No entanto, não consegui usá-lo porque ele criou tantas conexões de banco de dados quanto o número de linhas em seu arquivo, o que é um impacto potencial.

Para superar isso, escolhi a solução abaixo, que pode não ser a ideal, mas funciona com apenas uma conexão de banco de dados.

Considerando os mesmos dados em file.txt
 12354
 13456
 13498

Eu usei o comando sed abaixo para preencher o acima para uma única variável "12354,13456,13498"
myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")

Agora, o script abaixo passará essa variável para a consulta SQL e colocará os dados em um arquivo 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

A saída é armazenada em dboutput.txt (junto com a consulta SQL)
cat dboutput.txt
SQL>   select column1 from table_name where id in (12354,13456,13498);

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

SQL> spool off