DBMotoでは通常のレプリケーションに加え、複製元(ソース)のデータを関数を使用して変換し、複製先(ターゲット)にレプリケーションを行う機能が実装されております。
使用できる関数は以下の通りです。
・C#の関数
・VBの関数
・ユーザ関数
C#、VBの標準関数を使用できる他、DBMoto内に関数をオリジナルで定義し、ユーザ関数としてご利用いただくことも可能です。
例:
・Trim関数:前後の空白を除去する 「 テーブルデータ 」⇒「テーブルデータ」
・Ucase関数:小文字を大文字へ変換する 「Table Data」⇒「TABLE DATA」
・日付型を数値のみに変換する独自のユーザ関数 「2015/05/26」⇒「20150526」
●言語の選択
C#とVBをDBMoto内で混在させることはできないため、どちらか一方に統一する必要があります。以下の手順でC#とVBの切り替えが可能です。
2. スクリプト言語からC#かVBを選択します。デフォルトはC#です。
●関数適用手順
1. テーブルのカラム単位でマッピングがされているので、関数を適用するカラムを右クリックし「関数へのマッピング」を選択します。
2. カラムに対して関数を適用します。下記の画面ではVBのTrim関数を適用している例です。
※VBの場合は[カラム名].Trim()、C#の場合は[カラム名].ToString().Trim()
●ユーザ関数作成・適用手順
ユーザ関数はまずグローバルスクリプトにて関数を定義し、次にマッピング画面で関数名を指定する手順となります。
1. グローバルスクリプト内のGlobalクラス内に関数を定義します。下記の画面ではVBにてユーザ関数を定義しています。
2. ユーザマッピング画面で1で定義した関数名を指定します。
●特定の文字に変換するための置換関数
ソースのデータを特定の文字に変換する際にはReplace関数を使用します。
以下の例ではソースの「愛」という文字を「あい」へ変換してレプリケーションします。VBとC#どちらも同じです。
[カラム名].Replace("愛", "あい")
Replace関数はUnicodeの文字コードも指定可能です。
VBの場合は下記のように記述できます。
' 「ChrW(&Hxxxx)」のxxxxにUnicodeを記載します。愛が「611B」 [カラム名].Replace(ChrW(&H611B), "あい")
C#の場合は下記のように記述できます。
// 「\uxxxx」のxxxxにUnicodeを記載します。愛が「611B」 [カラム名].Replace("\u611B", "あい");
●関数の一括設定
関数をマッピング画面でカラム単位で1つずつ設定するのはどうしても時間がかかります。この時間を短縮し、一括で設定することが可能です。
1. 関数の一括設定はグローバルスクリプト内のMappingRuleクラスにて記述します。
下記の例ではVBでVARCHARのカラムに対し、Replace関数にて「愛」を「あい」へ変換する設定を一括で行うための内容です。
Imports System Imports System.Data Imports Microsoft.VisualBasic Imports DBMotoPublic Imports DBMotoScript Namespace DBRS Public Class GlobalScript : Inherits IGlobalScript End Class Public Class MappingRule : Inherits IMappingRule <MappingRuleAttribute("Replace(VARCHAR)", "「愛」を「あい」へ変換")> _ Public Function Function1 (ByVal bIsForth As Boolean, ByVal sSourceName As String, ByVal iSourceOrdinal As Integer, ByVal sSourceType As String, ByVal sTargetName As String, ByVal iTargetOrdinal As Integer, ByVal sTargetType As String, ByRef sExpression As System.Text.StringBuilder) As Boolean If sSourceName = sTargetName Then If sSourceType = "VARCHAR" Then sExpression.Append("[" + sTargetName + "].Replace(ChrW(&H611B), ""あい""") End If Return True Else Return False End if End Function End Class Public Class GlobalEvents : Inherits IGlobalEvents End Class End Namespace
2. マッピング画面にて「カスタムマッピング」から該当のものを選択します。
関連したトピックス
- レプリケーションの際にnullを特定の値に変換する方法 その2【リアルタイムレプリケーションツールDBMoto】
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方⑤:フィールドマッピング関数の書き方
- [DBMoto][スクリプト]カラムを結合・分割したレプリケーション
- テーブル一括作成やマッピングをカスタマイズ:グローバルスクリプト[Syniti Replicate]
- ジュリアンデートのレプリケーション【リアルタイムレプリケーションツールDBMoto】
- 複数のテーブルにあるレコードを1つのテーブルへ統合する際の注意点【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]「未マッピング使用」機能によるマッピング外のデータを活用したレプリケーション
- [DBMoto][スクリプト]条件付きレプリケーションを行うサンプルVBスクリプト
- [Syniti(DBMoto)][スクリプト] 特定カラムの値が変更となった場合、ターゲットのレコードを削除するサンプルスクリプト
- 複数の複製元サーバから1つの複製先サーバへの結合レプリケーションもDBMotoで簡単実現