複数のSQLを一度に実行するためのスクリプト

\ あなたにピッタリの銘柄がみつかる /

みんかぶプレミアムを無料体験!

プランをみる

お知らせ

読み込みに失敗しました。

しばらくしてからもう一度お試しください。

重要なお知らせ すべて見る

LONERさんのブログ

最新一覧へ

« 前へ186件目 / 全1039件次へ »
ブログ

複数のSQLを一度に実行するためのスクリプト


Oracle では、PL/SQL や CREATE 文 をファイルにしておいて、ファイルにしたスクリプトを実行することができる。
(Windows では、)plsql を開き、@マークの後にファイル名を続けて書いて Enter を押せばOKだ。
@"C:\Program Files\xxx.sql"
(Program Files の下にスクリプトをおくことはないだろうが、)上のような感じになる。

それでは、ファイルが複数ある場合はどのようにすればよいだろうか。ひとつずつファイルを入力するのもひとつだが、それだと時間も手間もかかる。そこで、次のようなスクリプトを使用して一括でスクリプトを実行するためのファイルを作る。(Windows 限定)(普段はもうちょっと別のことをやるためにForTablesという定数・引数をつかっていろいろやっているため、引数にForScripts, ForTables があるが、とりあえず下記のまま実行すればOK)
下のスクリプトは、拡張子を .js にして 保存しておく。




// 指定されたフォルダ内のスクリプトを全て実行するためのスクリプトを生成する。
// スクリプトファイルは拡張子(末尾が.sql)で判定する。

//定数の宣言
var ForReading = 1; //読み込み
var ForWriting = 2; //書きこみ(上書きモード)
var ForAppending = 8; //書きこみ(追記モード)

// スクリプト実行モード
var ForScripts = 0;
var ForTables = 1;

var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
var currentFolderPath = String(WScript.ScriptFullName).replace(WScript.ScriptName, "");

editFile(currentFolderPath, ForScripts, "_out.sql");

ForReading = null;
ForWriting = null;
ForAppending = null;
ForTables = null;
ForScripts = null;
objFileSys = null;
currentFolderPath = null;
outPutFileName = null;

/* 指定されたフォルダのスクリプト全てを実行するためのファイルを
* 生成する。
* 引数は
* フォルダパス
* 生成モード
* (スクリプトを実行するだけなら 0, 今のテーブルを変更するなら 1)
* 生成されるスクリプトのファイル名
*/
function editFile(folderPath, mode, outPutFileName) {
if (!folderPath.match(/\\$/)) {
folderPath += '\\';
}
var objOutFile;
var tableName = '';

var folder = objFileSys.GetFolder(folderPath);
var files = new Enumerator(folder.Files);

try {
objOutFile = objFileSys.CreateTextFile(folderPath + outPutFileName , true);
for (; !files.atEnd(); files.moveNext()) {
if (files.item().Path.match(/\.sql$/) &&
!files.item().Path.match(outPutFileName)) {
switch (mode) {
case ForScripts:
objOutFile.WriteLine('@"' + files.item().Path + '"');
break;
case ForTables:
tableName = files.item().Path.replace(/^.*\\([a-zA-Z_\d]*)\.sql/g, "$1");
objOutFile.WriteLine('CREATE TABLE ' + tableName + '_BK AS SELECT * FROM ' + tableName + ';');
objOutFile.WriteLine('DROP TABLE ' + tableName + ';');
objOutFile.WriteLine('@"' + files.item().Path + '"');
objOutFile.WriteLine('EXEC P_MOVE_TABLE_ITEM(\'' + tableName + '_BK\', \'' + tableName + '\');');
objOutFile.WriteLine('DROP TABLE ' + tableName + '_BK;');
objOutFile.WriteLine();
break;
}
}
}
objOutFile.Close();

} catch(e) {
WScript.echo("Error!");
WScript.echo(folderPath + outPutFileName);
} finally {
objOutFile.Close();
}

objOutFile = null;
strScriptPath = null;

return 0;
}


SyntaxHighlighter.all();

そして、このスクリプトと同じフォルダに、実行したいスクリプトをすべて入れておく(拡張子は.sqlにすること)。実行したいスクリプトがそろったら、スクリプトファイル(.js)をダブルクリックする。すると _out.sql というファイル名で実行すべきファイルが出来上がる。
最後に @"_out.sql" を実行すれば、すべてのスクリプトが一括で実行される。

エラーのログなどをとりたい場合はどうすればいいんだろうか??(・へ・;)
コメントを書く
コメントを投稿するには、ログイン(無料会員登録)が必要です。

ネット証券比較

みんかぶおすすめ