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

Send værdier læst fra en fil som input til en SQL-forespørgsel i Oracle

Løsningen givet af @codeforester virker. Jeg kunne dog ikke bruge det, fordi det skabte lige så mange DB-forbindelser som antallet af linjer i din fil, hvilket er en potentiel indvirkning.

For at overvinde dette valgte jeg nedenstående løsning, som måske ikke er ideel, men som klarer opgaven med kun én DB-forbindelse.

Overvejer de samme data i file.txt

 12354
 13456
 13498

Jeg brugte nedenstående sed-kommando til at udfylde ovenstående til en enkelt variabel "12354,13456,13498"

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

Nedenstående script vil nu sende denne variabel til SQL-forespørgslen og spoole dataene til en tekstfil:

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

Outputtet gemmes i dboutput.txt (sammen med SQL-forespørgslen)

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

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

SQL> spool off


  1. Sådan itererer du over et datointerval i PL/SQL

  2. Sådan ændres datoformat i Oracle-database

  3. SQL Server Bulk Insert – Del 1

  4. Hvordan man effektivt finder de nærmeste steder i nærheden af ​​en given placering