PowerShell から Oracle に接続(ODP.NET)
Oracle Client がなくても、ODAC(ODP.NET)さえインストールすれば、PowerShellからOracleに接続できます。
ODACのインストールと環境設定
ODACのダウンロード
XCopy版をダウンロードします。(要Oracleアカウント:無料)
64ビットのOracle Data Access Components(ODAC)のダウンロード
PowerShell の .NET Frameworkのバージョンを確認
PowerShellでデフォルトで使われる.NET Framework のバージョンにはOSにより2系と4系の2種類があるので確認します。
PowerShellを起動して
PS C:\> $PSVersionTable Name Value ---- ----- PSVersion 5.1.16299.251 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.16299.251 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
CLRVersion が .NET Framework のバージョンです。
この場合は4系ですね。
※2系であっても、PowerShell.exe.config を作成することで4系にできますが、ここでは割愛。
ODACのインストール
ダウンロードしたODACのzipファイルを解凍し、解凍したフォルダに移動して、PowerShell の .NET Framework バージョンに合わせて以下のいずれかをインストールします。
.NET Framework が2系の場合
install.bat odp.net2 c:\oracle odac
サンプルスクリプト(test.ps1)
[Reflection.Assembly]::LoadFile("C:\oracle\odp.net\bin\4\Oracle.DataAccess.dll") $constr = "Data Source=サーバーアドレス/サービス名;User Id=scott;Password=tiger;" $conn = New-Object Oracle.DataAccess.Client.OracleConnection($constr) $conn.Open() $sql = "select * from emp" $command = New-Object Oracle.DataAccess.Client.OracleCommand($sql, $conn) $reader = $command.ExecuteReader() while ($reader.Read()) { $value = $reader["EMPNO"].toString() + " " + $reader["ENAME"].toString() $value } $command.Dispose() $sql = "update emp set ENAME = 'SMITH' where EMPNO = 7369" $command = New-Object Oracle.DataAccess.Client.OracleCommand($sql, $conn) $command.ExecuteNonQuery(); $command.Dispose() $conn.Close()
2系の場合は最初の行が
[Reflection.Assembly]::LoadFile("C:\oracle\odp.net\bin\2.x\Oracle.DataAccess.dll")
になります。
実行
powershell.exe -ExecutionPolicy RemoteSigned -File test.ps1
小ネタですが、powershellの引数に -ExecutionPolicy RemoteSigned を渡すことでPowerShellのデフォルト設定を変更せずにスクリプトを実行できます。