sql >> データベース >  >> RDS >> Oracle

ファイルから読み取った値をOracleのSQLクエリへの入力として渡します

    @codeforesterによって提供されるソリューションは機能します。ただし、ファイル内の行数と同じ数のDB接続が作成され、潜在的な影響があるため、使用できませんでした。

    これを克服するために、私は以下のソリューションを選択しました。これは理想的ではないかもしれませんが、1つのDB接続だけで機能します。

    file.txt内の同じデータを検討する

     12354
     13456
     13498
    

    以下のsedコマンドを使用して、上記を単一の変数「12354,13456,13498」に入力しました

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

    以下のスクリプトは、この変数をSQLクエリに渡し、データをテキストファイルにスプールします。

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

    出力は(SQLクエリとともに)dboutput.txtに保存されます

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


    1. PostgreSQLで数値をフォーマットする方法

    2. SQL Server 2005で複数の行をコンマ区切りのリストに結合するにはどうすればよいですか?

    3. OracleでのLIKEを使用したアクセントと大文字と小文字を区別しない照合

    4. MySQLは大きなデータベースから重複をすばやく削除します