A THINKING FRUIT
概要
データベースのテーブルからレコードを取得する。CSV形式でエクスポートする。
使用ファイル一覧
1.
DB-Export-CSV.ps1
データベース・エクスポータ。
2.
LibDb.ps1
データベース・アクセス・ライブラリ for Oracle 。
実行方法
PS D:\dev> DB-Export-CSV product
product はテーブル名。
カレントディレクトリの <テーブル名> + ".csv" ファイルへ出力する。
PowerShell ソース
Param
(
[String]
$strTableName
,
[Switch]
$Display
)
Function
To-Hex {
Begin
{
$sb
=
[System.Text.StringBuilder]
::new(
$nCapacity
,
$nCapacity
) }
Process
{
[void]
$sb
.Append(
$_
.ToString(
'X02'
) ) }
End
{
$sb
.ToString() } }
Function
One-Line (
[String]
$strSeparator
,
[System.Int32]
$nCapacity
) {
Begin
{
$sb
=
[System.Text.StringBuilder]
::new(
$nCapacity
,
$nCapacity
)
$strSeparator2
=
''
}
Process
{
[void]
$sb
.Append(
$strSeparator2
)
$strSeparator2
=
$strSeparator
[void]
$sb
.Append(
$_
) }
End
{
$sb
.ToString() } }
Function
Column-Value {
Process
{
$Value
=
$_
if
(
$Value
-eq
$Null
) {
return
''
}
switch
(
$Value
.GetType() ) { {
$_
-eq
[String]
} {
'"'
+
$Value
+
'"'
} {
$_
-eq
[Int32]
} {
$Value
.ToString() } {
$_
-eq
[Decimal]
} {
$Value
.ToString() } {
$_
-eq
[Byte[]]} {
'"'
+ (
$Value
| To-Hex) +
'"'
} {
$_
-eq
[DateTime]
} {
'"'
+
$Value
.ToString(
'yyyy/MM/dd HH:mm:ss'
) +
'"'
} {
$_
-eq
[DBNull]
} {
''
} default {
throw
[System.Exception]
::new(
'指定された値は未対応の型です'
) } } } }
if
(
$strTableName
.Length
-eq
0
) {
return
}
$connectionStrings
= @{ server =
'localhost:1521'
; id =
'user'
; pw =
'pass'
; };
[void]
[reflection.assembly]
::LoadWithPartialName(
'System.Data.OracleClient'
) . LibDb
$DbCtl
=
$Null
try
{
$strOutputPath
=
'{0}.csv'
-f
$strTableName
$strSql
=
'select * from {0}'
-f
$strTableName
$DbCtl
=
[DbCtl]
::new(
$connectionStrings
.server,
$connectionStrings
.id,
$connectionStrings
.pw)
$DbCtl
.AttachCommand(
$strSql
)
$dset
=
[System.Data.DataSet]
::new()
$r
=
$DbCtl
.ExeSelect(
$dset
)
$table
=
$dset
.Tables[
0
]
if
(
$Display
) {
$table
} else {
# Output name of columns
if
(
$table
.Columns.Count
-gt
0
) {
$table
.Columns | %{
$_
.ColumnName } | One-Line
','
8192
| Out-File -Encoding default -FilePath
$strOutputPath
}
# Output rows
foreach
(
$row
in
$table
.Rows) {
$row
| %{
$_
.ItemArray | Column-Value} | One-Line
','
8192
| Out-File -Encoding default -FilePath
$strOutputPath
-Append } } }
catch
{
throw
}
finally
{
$DbCtl
.Dispose() }