ORACLEへの接続を簡易的に実行できるバッチファイルの応用について記載。
以下の構成で実行する想定
読み込みたいSQLファイルが配置されているパス
c:\File\sample.sql
BATを実行するパス
c:\File\system\sql_system@orcl.bat
LOGの出力パス
c:\File\system\yyyymmdd_hhmm.log
バッチファイルの実行階層はSQLの読み込み階層のひとつ下に配置する事で、バッチファイルで出力されるログをバッチファイル単位で集約できるメリットがある。
ログの出力先を変数とする必要が無いので、配置して実行することが容易である
以下のファイルを作成し、実行したいSQLファイルのディレクトリ配下に同名のサブフォルダを作成後コピーして、バッチファイルを実行します。
■BASE.SQL
SET ECHO OFF
-- 時刻を表示
SET TIME ON
SET VERIFY OFF
-- カレントディレクトリ
DEFINE SQL_RUN_PATH ='&1';
COLUMN SQL_RUN_PATH NEW_VALUE SQL_RUN_PATH FORMAT a75
SELECT '&SQL_RUN_PATH' SQL_RUN_PATH FROM DUAL;
-- ログの出力先
DEFINE LOG_FILE_PATH ='&2\';
-- 拡張子を指定
DEFINE LOG_FILE_EXT = .log
-- ファイル名を日付+時刻で指定
COLUMN LOG_PATH NEW_VALUE LOG_FILE FORMAT a75
SELECT '&LOG_FILE_PATH' || to_char(sysdate,'yyyymmdd_hh24miss') || '&LOG_FILE_EXT' LOG_PATH FROM DUAL;
-- ログの出力
SPOOL '&LOG_FILE' APPEND
■SQLPLUS_SYSTEM@ORCL.BAT
@echo off
cd /d %~dp0
REM ■LOGの出力パス %DIR_LOG%
SET DIR_LOG=%CD%
REM ■BATの実行パス %DIR_BAT%
SET DIR_BAT=%CD%
cd ..
REM ■SQLの実行パス %DIR_SQL%
SET DIR_SQL=%CD%
sqlplus system/********@orcl @%DIR_BAT%\base.sql %DIR_SQL% %DIR_LOG%
「SQLPLUS_SYSTEM@ORCL.BAT」ファイル内で、BATとSQLのカレントディレクトのを合わせたい場合、「cd ..」を削除する