PowershellでOracleのデータベースに接続

コンピュータ

PowershellからOracleのデータベースをいじる必要がありそうなので、とりあえず接続方法だけでも確認してみたいと思います。
個人的にデータベースは接続方法が異なるだけで、接続してしまえば後はSQLを使いデータをいじる方法は、どのデータベースも似たようなものだと考えています。高度処理(高速・高効率)をしようと思うとデータベース依存な機能に頼ることになりますが、必要に迫られない限りそういった処理をしないよう意識することで、いろいろなデーベースに使えるコードを書くことが出来ます。

Powershellについて
Windows10標準シェルスクリプト(実行開発環境のインストール不要)
.Net Frameworkを利用可能(GUIアプリも開発可)
COMも利用可能(Excelの自動操作とか)
癖のあるパイプライン(実用的ではある)

スポンサーリンク

ps1を初めて実行する場合

実行環境

Windows10 Pro 64bit
Oracle 10.2.0.3.0 32bit
Windows PowerShell(x86)で実行

スクリプト

<#
.SYNOPSIS
 Oracleデータベース接続する。
.DESCRIPTION
 サンプルスクリプト
#>

using namespace System.Data.OracleClient

# アセンブリのロード
Add-Type -AssemblyName System.Data.OracleClient

# 接続文字列
$User = "ユーザーID"
$Pass = "パスワード"
$DataSource = "データソース"
$ConnectionString = "Data Source=${DataSource};User ID=${User};Password=${Pass};Integrated Security=false;"

# 接続
$Connection = [OracleConnection]::new($ConnectionString)
$Connection.Open()

# SQL
$sqlString = "SELECT KBN FROM AAA"

# コマンドオブジェクトを生成
$Command = [OracleCommand]::new() | % {
    $_.Connection = $Connection
    $_.CommandText = $sqlString
    $_
}

# SQLの結果を読み込み
$Reader = $Command.ExecuteReader()

while($Reader.Read())
{
    Write-Host $Reader['KBN']
}

$Reader.Dispose()

$Command.Dispose()

# 切断
$Connection.Dispose()

データベースの接続情報や取得するテーブルは実行環境に合わせてください。

感想

OSは64bitでOracleクライアントが32bitな環境で実行しています。この場合PowershellをOracleクライアントに合わせてWindws PowerShell(x86)で実行します。もしPowerShell(x86)を初めて実行する場合はps1の実行許可をする必要があります。
Oracleクライアントが64bitの環境が無いので試していませんが、スクリプトそのものは64bit環境でも実行できると思います。

スクリプトで実行していることは、データベースの接続オブジェクトの生成、接続後SQLを実行するためのコマンドオブジェクトを生成実行しSQLの読み込みオブジェクトを使ってSQLの結果を画面に出力しています。後処理として切断やオブジェクトの破棄などを行っています。

コメント