
PowerShellからSELECT文を発行する
powerShellからOracleに接続してSELECT文を実行してみます。
Oracleへの接続、切断は前回の記事(powerShellからOracleを使う(接続・切断))を参照して下さい。
サンプルコード
まず、SELECT文を作成する関数を準備します。
別に、関数である必要はないのですけどね。
# SELECT文を作成する関数です。
function createSelectSQL () {
# StringBuilderクラスのインスタンスを作成します。
$SQL = New-Object System.Text.StringBuilder
# appendメソッドでselect文を作成します。
[void]$SQL.append("SELECT")
[void]$SQL.append( " NUMMGR") # NUMBER型
[void]$SQL.append( ",NUMSLP") # VARCHAR2型
[void]$SQL.append( " FROM")
[void]$SQL.append( " ABCD")
# 作成したSELECT文を返却します。
$SQL.ToString()
}
さて、本題のSELECT文を実行するサンプルです。
# OracleClientのアセンブリをロード
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")
# OracleConnectionオブジェクトの作成
$oracleConectionString = "Data Source=TESTDB;User ID=USER01;Password=USER001;Integrated Security=false;"
$oracleConection = New-Object System.Data.OracleClient.OracleConnection($oracleConectionString)
$oracleCommand = New-Object System.Data.OracleClient.OracleCommand
$oracleCommand.Connection = $oracleConection
# データベースに接続します。
$oracleConection.Open()
# SQL(SELECT文)を設定します。
$oracleCommand.CommandText = createSelectSQL
# SQL(SELECT文)を実行します。
$oracleDataReader = $oracleCommand.ExecuteReader()
# SQL(SELECT文)の実行結果を取得します。
Try {
while ($oracleDataReader.Read()) {
# 項目名を指定して取得
Write-Host "項目名で取得"
Write-Host ("NUMMGR = [" + $oracleDataReader["NUMMGR"] + "]")
Write-Host ("NUMSLP = [" + $oracleDataReader["NUMSLP"].ToString() + "]")
# 列番号を指定して取得
Write-Host "列番号で取得"
Write-Host ("NUMMGR = [" + $oracleDataReader.GetInt32(0) + "]")
Write-Host ("NUMSLP = [" + $oracleDataReader.GetString(1) + "]")
}
} finally {
# 正常、異常のどちらでも、OracleDataReaderオブジェクトを閉じます。
Write-Host "OracleDataReaderオブジェクトのクローズ"
$oracleDataReader.Close()
}
# DB切断&リソース解放。
$oracleCommand.Dispose()
$oracleConection.Close()
$oracleConection.Dispose()
サンプルの解説
1.createSelectSQL関数
可変型の文字列を表すStringBuilderクラスを使用して、SELECT文を作成します。
作成した文字列をToStringメソッドでString型にして返却します。
なお、ToStringで変換しなくても問題なく動作します。
つまり、$SQL.ToString() → $SQL でOKです。
わざわざToStringをつかったのは、個人的な趣味です。
2.SQLの設定、実行
まず、作成したSQL文をOracleCommandクラスのCommandTextプロパティに設定します。
このSQLはExecuteReaderメソッドで実行されます。
ExecuteReaderメソッドは、戻値としてOracleDataReader オブジェクトを生成します。
SELECT文の実行結果は、このOracleDataReaderに格納されます。
3.実行結果の取得
OracleDataReaderのReadメソッドで実行結果を1行取り出すことが出来ます。
このReadメソッドは、データがある時はTrue、最終行でFalseを返すので、whileで最終行に到達するまで処理を繰り返してデータを取得します。
データの取得方法は、項目名を指定して取得する方法と、列番号(0始まり)を指定して取得する方法の2種類あります。
サンプルには、同じデータをそれぞれの方法で取得してコンソールに出力しています。
全てのデータ抽出が終了したら、CloseメソッドでoracleDataReaderを終了します。
サンプルでは、読み込み中にエラーが発生した場合を考慮して、finallyに記述しています。
前回:powerShellからOracleを使う(接続・切断)
次回:powerShellからOracleを使う(DML文:INSERT、UPDATE、DELETE)
投稿記事の一覧:目次
後書き
データの取得方法には、他にもいろいろあるようです。
何やら、dataSetだのアダプタが云々とかいろいろ出てきましたが、面倒なので調べるのをやめました。
単純にデータを抜き出すのであれば、これで十分かと思います。
次回は、DML文(INSERT、UPDATE、DELETE)の実行方法の予定です。
スポンサードリンク


