
PowerShellからDML文を発行
powerShellからOracleに接続してDML文(SELECT、UPDATE、DELETE)を実行してみます。
基本的には、3つとも同じ方法で実行できます。
なお、Oracleへの接続、切断は「powerShellからOracleを使う(接続・切断)」を、抽出は「powerShellからOracle操作(抽出:SELECT文)」を参照して下さい。
サンプルコード(登録:INSERT文)
まず、登録(INSERT文)を発行するサンプルを提示します。
# 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(INSERT文)を設定します。
$oracleCommand.CommandText = "INSERT INTO ABCD (TESTCD, TESTID) VALUES ('0', '004')"
# SQL(INSERT文)を実行します。
[void]$oracleCommand.ExecuteNonQuery()
# DB切断&リソース解放。
$oracleCommand.Dispose()
$oracleConection.Close()
$oracleConection.Dispose()
サンプルの解説
1.SQLの設定(CommandTextプロパティ)
まず、SQL文をOracleCommandクラスのCommandTextプロパティに設定します。
ここまでは、前回紹介した抽出と同じです。
2.SQLの実行(ExecuteNonQueryメソッド)
DML文の実行は、OracleCommandクラスのExecuteNonQueryメソッドを使用します。
これによって、先ほど設定したINSERT文が実行されることになります。
このメソッドは、戻値として「影響を受ける行の数」を返却します。
INSERTは登録件数、UPDATEは更新件数、DELETEは削除件数ってことですね。
サンプルでは、値を指定してのINSERTなので結果は1固定なので、[void]を指定して戻値を受けないようにしています。
補足
ExecuteNonQueryメソッドは、実行した時点でコミットが行われます。
コミットやロールバックのタイミングを制御したければ、トランザクションを使用する必要があります。
トランザクションの使い方については、次回にサンプルを提示します。
UPDATE文
今度は、UPDATE文を実行するサンプルです。
同じようなコードを見せても仕方ないので、SQL文の設定、実行の部分だけとします。
# SQL(UPDATE文)を設定します。
$oracleCommand.CommandText = "UPDATE ABCD SET TESTCD = '1' WHERE TESTID IN ('001','003')"
# SQL(UPDATE文)を実行します。
$oracleUpdateCount = $oracleCommand.ExecuteNonQuery()
Write-Host ("更新件数 = " + $oracleUpdateCount + "件")
今度は、ExecuteNonQueryメソッドの戻値を取得して、コンソールに更新件数を表示するようにしています。
DELETE文
最後に、DELETE文を実行するサンプルです。
やりかたは、完全にUPDATEと同じです。
# SQL(DELETE文)を設定します。
$oracleCommand.CommandText = "DELETE FROM ABCD WHERE TESTID IN ('000','003','004')"
# SQL(DELETE文)を実行します。
$oracleDeleteCount = $oracleCommand.ExecuteNonQuery()
Write-Host ("削除件数 = " + $oracleDeleteCount + "件")
戻値を受ける変数の名称を、$oracleUpdateCount から $oracleDeleteCount に変えているのは、単なる趣味です。
後書き
今回はDML文を実行しましたが、ExecuteNonQueryメソッドは、正しくはSQLステートメントを実行するメソッドです。
つまり「CREATE TABLE」とか「DROP TABLE」だとかも実行できるようで、この時の戻値は、0か-1になるようです。
“ようです”というのは、実験していないからです。
というのも「PowerShellからOracleに対して、そこまでの操作をさせて良いのだろうか?」って思いがあるんですよ。
私なら、そういう操作を行わずに済むように設計を見直しますね。
まぁ、事情はいろいろあるでしょうから、一概に否定はできないのですけど...
前回:powerShellからOracle操作(抽出:SELECT文)
次回:powerShellからOracleを使う(トランザクション)
投稿記事の一覧:目次
さて、本記事中にも書いていますが、次回はトランザクションの使い方を書こうかと思います。
やりたいことは一通りできたので、PowerShellからのOracle操作シリーズは、次回で終了としようかと思います。
スポンサードリンク


