Pass values read from a file as input to an SQL query in Oracle

前端 未结 2 859
囚心锁ツ
囚心锁ツ 2021-01-17 05:31
#cat file.txt
 12354
 13456
 13498

#!/bin/bash
for i in `cat file.txt`
do
    sqlplus XXXXX/XXXXX@DB_NAME << EOF 
        selec         


        
2条回答
  •  伪装坚强ぢ
    2021-01-17 06:07

    The solution given by @codeforester works. However I was unable to use it because it created as many DB connections as the number of lines in your file which is a potential impact.

    To overcome this, I chose the below solution which may not be ideal but does the job with just one DB connection.

    Considering the same data in file.txt

     12354
     13456
     13498
    

    I used the below sed command to populate the above to a single variable "12354,13456,13498"

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

    Now below script will pass this variable to the SQL query and spool the data into a text file:

    #!/bin/bash
    myvariable=$(echo "`cat file.txt | sed '$!s/$/,/g' | tr -d '\n' | tr -d ' '`")
    echo @myvariable
    sqlplus /nolog << EOF
    CONNECT user@dbname/dbpassword
    SPOOL dboutput.txt
    select column1 from table_name where id in ($myvariable);
    SPOOL OFF
    EOF
    

    The output is stored in dboutput.txt (along with the SQL query)

    cat dboutput.txt
    SQL>   select column1 from table_name where id in (12354,13456,13498);
    
    NAME
    ----------------------------------------------------------------------------  ----
    data1
    data2
    data3
    
    SQL> spool off
    

提交回复
热议问题