公開日:10/27/2020  更新日:3/26/2022

  • twitter
  • facebook
  • line

【Oracle】SQLファイルをバッチファイルで一括実行

はじめに

本記事では、大量のSQLファイルを一括実行可能なバッチスクリプトを作成した際の備忘録を残します。

実行環境

  • Windows 10
  • Oracle DataBase 18c

OracleのDB用のCUIクライアントツール である SQL*Plus がインストール済み。
sqlplus コマンドが既に使える状態を想定。

スクリプト

ディレクトリ指定でSQLファイルを一括実行するスクリプトは以下になります。

@echo off

rem 実行対象のSQLファイルが格納されたフォルダの絶対パス
set DIR=C:\sample\*

rem ログ出力先
set LOG_DIR=%~dp0\log
set LOG_FILENAME=log.txt

rem ログ出力先の作成
If not exit %LOG_DIR% mkdir %LOG_DIR%

rem DB接続情報を設定
set DB_CONN=username/password@localhost:1521/XEPDB1

rem 指定ファイルを実行
for %%a in (%DIR%) do(
	echo %%~faを実行 >> %LOG_DIR%\%LOG_FILENAME%
	
	rem 拡張子取得
	set ex=%%~xa
	if /i ex == sql (
		rem 指定ファイルがSQLファイルの場合
		echo exit | sqlplus %DB_CONN% @%%a >> %LOG_DIR%\%LOG_FILENAME% 2>&1
	) else(
		rem 指定ファイルがSQLファイル以外の場合
		for /f %%i in (%%a) do (
			echo %%~fiを実行 >> %LOG_DIR%\%LOG_FILENAME%
			echo exit | sqlplus %DB_CONN% @%%i >> %LOG_DIR%\%LOG_FILENAME% 2>&1
		)
	)
)

exit /b

ポイント

  • ワイルドカード * を使用して、指定フォルダ配下のSQLファイルを指定する
  • sqlplusへのログインを繰り返すため、exit コマンドを sqlplus にパイプで渡す
  • 拡張子がsqlでない場合 (例:ddl)、中身を一行ずつ読んで指定ファイルを実行する

戻る