自動化しようとしているSQLスクリプトがいくつかあります。過去に私はSQL*Plusを使用し、bashスクリプトから手動でsqlplusバイナリを呼び出しました。
ただし、DBに接続し、bashスクリプト内からスクリプトを呼び出す方法があるかどうかを調べようとしています...これにより、クエリを挿入date
して、特定の日数に関連してクエリを実行できるようになります。過去。
少し混乱しています。bashスクリプト内からsqlplusを呼び出すことができるはずです。これはあなたが最初の声明でやっていたことかもしれません
bashスクリプト内で以下を実行してみてください。
#!/bin/bash
echo Start Executing SQL commands
sqlplus <user>/<password> @file-with-sql-1.sql
sqlplus <user>/<password> @file-with-sql-2.sql
スクリプトにデータを渡すことができるようにしたい場合は、スクリプトに引数を渡すことにより、SQLPlusを介してそれを行うことができます。
file-with-sql-1.sqlの内容
select * from users where username='&1';
次に、bashスクリプトを変更して、値を渡すsqlplusを呼び出します。
#!/bin/bash
MY_USER=bob
sqlplus <user>/<password> @file-with-sql-1.sql $MY_USER
「ヒアドキュメント」を使用して同じことを行うこともできます。
VARIABLE=SOMEVALUE
sqlplus connectioninfo << HERE
start file1.sql
start file2.sql $VARIABLE
quit
HERE
たぶん、SQLクエリをsqlplusにパイプすることができます。それはmysqlのために働きます:
echo "SELECT * FROM table" | mysql --user=username database
これがbashシェルでMySQLクエリを実行する簡単な方法です
mysql -u [database_username] -p [database_password] -D [database_name] -e "SELECT * FROM [table_name]"
Sourceforgeでjdbcsqlプロジェクトを使用しました。
* nixシステムでは、これにより、標準出力への結果のcsvストリームが作成されます。
java -Djava.security.egd=file///dev/urandom -jar jdbcsql.jar -d oracledb_SID -h $host -p 1521 -U some_username -m oracle -P "$PW" -f excel -s "," "$1"
-Djava.security.egd=file///dev/urandom
追加するとパフォーマンスが大幅に向上することに注意してください
Windowsコマンドも同様です。http://jdbcsql.sourceforge.net/を参照してください。
サーバー/マシンにインストールしたくない場合はsqlplus
、次のコマンドラインツールを使用できます。これは単純なJavaアプリケーションであり、このツールを実行するために必要なのはJava8だけです。
このツールを使用して、LinuxbashまたはWindowsコマンドラインから任意のSQLを実行できます。
例:
java -jar sql-runner-0.2.0-with-dependencies.jar \
-j jdbc:oracle:thin:@//oracle-db:1521/ORCLPDB1.localdomain \
-U "SYS as SYSDBA" \
-P Oradoc_db1 \
"select 1 from dual"
ドキュメントはこちらです。
バイナリファイルはこちらからダウンロードできます。
BashにはSQLデータベース接続が組み込まれていないため、何らかのサードパーティツールを使用する必要があります。