トリガーをソース データベースからターゲット データベースにコピーする場合は、トリガーを定義するときに、次のコード例のように、triggerタグのselection="included"属性を指定します。
<triggers> <trigger selection= "included"> <database>west1000</database> <subject_table_database>west1000</subject_table_database> <table>employee</table> <name>RaiseTrig</name> <action_time enabled="NO">BEFORE</action_time> </trigger> </triggers>
パラメータ | 値 |
---|---|
selection |
|
database | トリガーが存在するデータベース名。 |
subject_table_database | トリガーの関連テーブルが存在するデータベース名。 |
table | トリガーの関連テーブルの名前。 |
name | トリガーの名前。 |
action_time |
|
enabled |
"YES"パラメータを有効にするには、この値をaction_timeにする必要があります。値が"NO"の場合、action_timeパラメータは無効です。 トリガーがターゲット上で有効か無効かを調べるには、dbc.TriggersXをSELECTクエリーして、EnabledFlag列を確認します。 |
ルールと制限
- トリガーに関連するテーブルをコピーせずにトリガーをコピーすると、エラーが発生します。
- コピーするオブジェクトがターゲット データベースに存在しない場合は、ターゲット データベース上に作成されます。オブジェクトがターゲット データベースに存在する場合は、overwrite_existing_objectsプロパティがfalseに設定されていないとオブジェクトは上書きされます。 その場合、作成タイムエラーが生成されます。
- トリガーに参照されているテーブルがターゲットに存在する場合に、そのテーブルをコピーすると、ターゲット テーブルは上書きされ、トリガーは新しくコピーされたテーブルを使って置き換えられます。
- コピーされたトリガーに関連付けられているテーブル、またはコピーされたトリガーによって参照されているテーブルの名前を変更するか、または再配置しようとすると、エラーが発生します。
- トリガー定義内のトリガー名が完全修飾名でない場合、トリガーはソース トリガー データベースと同じ名前のデータベース内に作成されます。
- トリガー定義内のテーブル名が完全修飾名でない場合、テーブルは、エラーが発生しないようにソース トリガー データベースと同じ名前のデータベース内に存在している必要があります。
例
次の例では、ソース マシン上のトリガーは、定義内でオブジェクト名を完全修飾せずに作成されます。CREATE TRIGGER RaiseTrig AFTER INSERT ON Employee FOR EACH ROW ( INSERT INTO SalaryLog VALUES ('Hello','Hi',23, 43); );この場合、トリガーをターゲットにコピーすると、トリガーはソース トリガー データベースと同じ名前のデータベース内に作成されます。EmployeeテーブルとSalaryLogテーブルがこのデータベース内に存在しない場合は、エラーが発生します。
TeradataとHadoopシステム間でトリガーをコピーすることはできません。