対応バージョン
Oracle Linux 6
更新履歴
| 日付 | 更新概要 |
|---|---|
| 2016/06/15 | 記事公開 |
LinuxやUnixにて等間隔に繰り返しSQLを実行したい場合、OSの機能を利用してSQLのループ処理をすることが可能です。
cronなどを利用することもできますが、お手軽にできる方法としてwhileループを利用する方法があります。
Linuxでのwhileループ実行例
ループコマンド
$ ORACLE_SID=orcl
$ NLS_DATE_FORMAT="yyyy/mm/dd hh24:mi:ss"
$ export ORACLE_SID NLS_DATE_FORMAT
$ while true
> do
> echo "set pagesize 1000 linesize 1000 trim on tab off feedback off"
> echo "select sysdate from dual;"
> sleep 5
> done | sqlplus -L -s / as sysdba
SYSDATE
-------------------
2016/06/15 18:04:36
SYSDATE
-------------------
2016/06/15 18:04:41
SYSDATE
-------------------
2016/06/15 18:04:46
.....
ループ実行の仕組み
SQL*Plusでは標準入力を受け付けた場合、そのSQLの実行をします。
ここではwhileでのループ時にechoした内容が標準出力として出力され、パイプ(|)を通してsqlplusに渡されています。
sqlplusに-Lと-sオプションを指定していますが、ここでの動作とは無関係です。(sqlplusの-Lはログイン失敗時のユーザ名の再入力リクエストをなくします。-sはプロンプト(SQL>)やログイン時のメッセージを出力しません。)
他にsqlplusへの標準入力の渡し方は以下のような方法があります。
パイプを使用する(catを使用した方法)
$ # ファイルの内容を確認する
$ cat test.sql
alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss';
select sysdate from dual;
exit
$ # ファイルの内容をsqlplusへ渡して実行する
$ cat test.sql | sqlplus -s / as sysdba
Session altered.
SYSDATE
-------------------
2016/06/15 18:28:33
1 row selected.
ファイルの内容を直接リダイレクションで渡す
$ sqlplus -s / as sysdba < test.sql
Session altered.
SYSDATE
-------------------
2016/06/15 18:28:33
1 row selected.
ヒアドキュメントを使用する
SQLEOFに挟まれた文を実行します。
$ sqlplus -s / as sysdba << SQLEOF
> alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss';
> select sysdate from dual;
> exit
> SQLEOF
Session altered.
SYSDATE
-------------------
2016/06/15 18:30:17
1 row selected.
