Corredor

ウェブ、プログラミングの勉強メモ。

VBSQLipt:Oracle DB に接続して SQL を実行する VBScript を作った

VBScript実用プログラミング・テクニック―正規表現、OOP、SQLを応用した実用ツールの作成技法

VBScript実用プログラミング・テクニック―正規表現、OOP、SQLを応用した実用ツールの作成技法

SQL*Plus がない環境で Oracle DB を参照したくて、VBScript から DB 接続して SQL を実行するプログラムを作ってみた。

コード

初めに、できあがったコードは以下のとおり。Gist-it で GitHub のコードを埋め込もうとしたんだけどうまくいかなかったので GitHub へのリンクでご容赦。

使い方

この VBSQLipt.vbs (ダジャレw) をダブルクリックで実行すると、開始して良いか確認するダイアログが出る。「OK」をクリックすると、黒い IE が画面全体に広がって、DB に接続される。この IE がコンソール代わりになる。

メッセージを入力できるプロンプトが表示されたら、ココに SQL を入力する。SELECT 文を入力すれば結果を IE コンソールに吐き出すかどうかを選択できる。UPDATE なども可能だが、実行した瞬間にコミットされてロールバックはできないので注意。

SQL*Plus ではないので、Set 文など Oracle 独自の構文は不可。あくまで SQL として実行できる文のみ有効だ。

終了したいときは、メッセージプロンプトに「exit」か「quit」と入力する。

製作過程メモ

「VBScript DB接続」とかでググってベースを作った。

IE をコンソールとして使うアイデアは、VBScript で進捗状況を示すウィンドウを IE で作った時の手法を流用した。

neos21.hatenablog.com

While True で無限ループが可能なアイデアをどこかで見かけたので、これでメッセージプロンプト表示と SQL 実行を繰り返させるようにした。「exit」か「quit」を受け取った時だけ、Exit DoWhile ループを抜けている。

取得した結果件数を取得するのに、カーソルロケーションをクライアントサイドカーソルにしないといけないらしい。これよく分かってない。

1番詰まったのは、環境に合わせた ConnectionString の書き方。Windows 上で ODBC が登録されていれば、その名前を参照することで接続できたりするが、自分はできれば VBScript 内で接続情報を完結させたかった。

色々調べて、tnsnames.ora ファイルに書く接続先文字列をそのまま書くことで実行できる方法を見つけた。多分これは Oracle クライアントがインストールされていないといけないと思う。

ODBC 接続も可能だが、その際の接続先情報を VBScript 内だけで完結させる方法はちと分かってない。一応、登録済みの ODBC データソースの名前を指定する方法は、コード中にコメントで記載しておいた。この辺詳しくなりたい…。

SQL の妥当性チェックとか、動作中に IE が閉じられてしまった時のハンドリングなどはしていない。自分が使う範囲のスクリプトであれば、極端に異常系をチェックしたりしなくていいやと思ってる。気を付けて使えばいいんです。w

できたらいいなと思っているのは、SQL の複数行入力。IE は出力するだけで入力はできない作りなので、IE 上でテキストエリアとか置けたらいいのかしら?それなら HTML 中に VBScript 埋め込む作りの方がいいのかな。

入力内容の履歴保持もやれたら良いなーと思ってるけど、一旦これで事足りてるし、諦めている。

なんとなく GitHub リポジトリにしてみたので、何らかの依頼とかがあったら何らかの更新とかしてみようと思う。

参考