社内SEの徒然なる日記

powerShellからOracleを使う(接続・切断)

Oracleを使いたい

powerShellからOracleに接続してSQLを実行してみます。

環境は、WindowsXP SP3、Oracle11g、PowerShell V2.0です。
Oracleクライアントはインストール&接続確認済みです。

方法はいろいろあるようですが、どうやらPowerShellから.NET Frameworkの機能を呼出すのが正攻法のようですので、これで実装してみます。

サンプルコード

MSDNライブラリとか、あちこちのサイトから情報をかき集めて動くものを作ってみました。
接続して切断するだけの、実際には何もしない処理です。

try {

# 2.アセンブリのロード
# OracleClientのアセンブリをロードするには次のように記述します。
# PowerShellからOracleデータベースを操作するには、事前にアセンブリをロードする必要があります。
# 今回は.NET FrameworkのOracleClient名前空間にあるクラスを使用します。

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")

# 3.コネクションの作成(OracleConnectionクラス)
$oracleConectionString = "Data Source=TESTDB;User ID=user01;Password=user001;Integrated Security=false;"
$oracleConection = New-Object System.Data.OracleClient.OracleConnection($oracleConectionString)

# 4.インスタンスの初期化(OracleCommandクラス)
$oracleCommand = New-Object System.Data.OracleClient.OracleCommand

# インスタンスで使用するOracleConnectionを設定します。
$oracleCommand.Connection = $oracleConection

# 5.データベースに接続
$oracleConection.Open()

# 6.データベースから切断
$oracleCommand.Dispose() # リソースを解放します。
$oracleConection.Close() # データベースから切断します。
$oracleConection.Dispose() # リソースを解放します。

} catch [Exception] {
Write-Host "データベース出力エラー"
$Error[0]
}


サンプルコードを書くとき、私が使用しているエディタの設定に合わせて色を付けています。
上記の場合、Windows PowerShell ISE を再現しようとしています。
まぁ、一部手抜きしてますけどね。

解説


1.エラートラップ

tryでエラートラップをしていますが、深い意味はありません。
...いや、正確にはちゃんとエラートラップしないといけないんですけど、今回は動作確認を優先します。

2.アセンブリのロード

PowerShellでOracleを扱うには、まずアセンブリをロードする必要があるそうです。
...ごめんなさい、実は何のことやらさっぱり分っていません。

とりあえず、これを記述しておけば良いそうです。書かないと動きません。

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")


先頭に[void]はなくても動きます。
ただし、コンソールにSystem.Data.OracleClientの情報が表示されてウザいので、[void]を付けて戻値を無効にしています。

3.コネクションの作成(OracleConnectionクラス)

まず、OracleConnectionクラスを使用して、データベースへの接続を行います。

「Data Source」に接続先、「ID」にユーザーID、「Password」にパスワードを設定します。
つまり、sql*plusとかでログインする時の情報を設定するのです。

最後の「Integrated Security」はWindowsのログイン情報を使用してOracleに接続する時に使用する設定ですので、falseを指定しておきます。

4.インスタンスの初期化(OracleCommandクラス)

次に、実際にSQLを実行するための、OracleCommandクラスを生成します。
接続先(Connection)には、項番3.で作成したコネクションを設定します。

5.データベースに接続

$oracleConection.Open() で実際に接続を行います。
SQLの実行は、この後に行うことになります。
今回は、何もしませんけどね。

6.データベースから切断

Oracleから切断して、リソースを解放します。
closeメソッドで切断、Disposeメソッドでリソースの解放です。
余談ですが、トランザクション実行中にcloseメソッドを実行するとロールバックされます。

実は、この切断の部分があやふやです。
機能として動作することは確認したのですが、MicrosoftのMSDNライブラリのOracleConnection.Close メソッドの説明画面には、「OracleConnection に対して Close を呼び出さないでください。」とか注意書きが書いている。

しかし、それ以外に切断する方法は見当たらないし、そもそもMSNDライブラリのサンプルソース自体がcloseメソッドを使っているので、サンプルの方法で実装することにしました。

次回:powerShellからOracle操作(抽出:SELECT文)
投稿記事の一覧:目次

後書き

次回以降、SELECT、INSERT、UPDATE、DELETEの実行方法と、トランザクションの使用方法を書いていきます。
スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する