sql >> Databáze >  >> RDS >> Oracle

Předat hodnoty načtené ze souboru jako vstup do SQL dotazu v Oracle

Řešení poskytnuté @codeforester funguje. Nemohl jsem ho však použít, protože vytvořil tolik DB spojení, kolik řádků ve vašem souboru bylo, což je potenciální dopad.

Abych to překonal, zvolil jsem níže uvedené řešení, které nemusí být ideální, ale funguje pouze s jedním DB připojením.

Vezmeme-li v úvahu stejná data v souboru.txt

 12354
 13456
 13498

Použil jsem níže uvedený příkaz sed k naplnění výše uvedeného do jedné proměnné "12354,13456,13498"

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

Nyní níže uvedený skript předá tuto proměnnou SQL dotazu a zařadí data do textového souboru:

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

Výstup je uložen v dboutput.txt (spolu s SQL dotazem)

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

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

SQL> spool off


  1. převést sériové číslo Excel Date na běžné datum

  2. Převést „smalldatetime“ na „datetime2“ v SQL Server (příklady T-SQL)

  3. Vliv různých technik zpracování chyb na výkon

  4. Architektura SQL Server AlwaysOn ( Availability Group ) a instalace krok za krokem -1