社内SEの徒然なる日記

powerShellからOracleを使う(抽出:SELECT文)

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)の実行方法の予定です。
スポンサードリンク

PageTop

コメント


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