Oracle
 sql >> Base de données >  >> RDS >> Oracle

Transmettre les valeurs lues à partir d'un fichier en entrée d'une requête SQL dans Oracle

La solution donnée par @codeforester fonctionne. Cependant, je n'ai pas pu l'utiliser car il a créé autant de connexions à la base de données que le nombre de lignes dans votre fichier, ce qui a un impact potentiel.

Pour surmonter cela, j'ai choisi la solution ci-dessous qui n'est peut-être pas idéale mais qui fait le travail avec une seule connexion DB.

Considérant les mêmes données dans file.txt

 12354
 13456
 13498

J'ai utilisé la commande sed ci-dessous pour remplir ce qui précède dans une seule variable "12354,13456,13498"

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

Maintenant, le script ci-dessous transmettra cette variable à la requête SQL et spoulera les données dans un fichier texte :

#!/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 sortie est stockée dans dboutput.txt (avec la requête SQL)

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

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

SQL> spool off