Al copiar un desencadenador de una base de datos de origen a una base de datos de destino, se debe especificar el atributo selection="included" de la etiqueta trigger al definir el desencadenador, como se muestra en el siguiente ejemplo de código.
<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>
Parámetro | Valores |
---|---|
selection |
|
database | Nombre de base de datos en la cual reside el desencadenador. |
subject_table_database | Nombre de base de datos en la que reside la tabla que se asocia con el desencadenador. |
table | Nombre de la tabla que está asociada con el desencadenador. |
name | Nombre del desencadenador. |
action_time |
|
enabled |
El valor debe ser "YES" para activar el parámetro action_time. Si el valor es "NO", el parámetro action_time no será válido. Para verificar si un desencadenador está habilitado o deshabilitado en el destino, se utiliza la consulta SELECT de dbc.TriggersX y se consulta la columna EnabledFlag. |
Reglas y restricciones
- Se producirá un error si se copia un desencadenador sin copiar los resultados de la tabla asociados.
- Si el objeto que se está copiando no existe en la base de datos de destino, se crea. Si el objeto existe en la base de datos de destino, se sobrescribe, a menos que la propiedad overwrite_existing_objects se establezca como false. En ese caso, se producirá un error en el momento de la creación.
- Al copiar una tabla que ya existe en el destino con desencadenadores asociados, se sobrescribe la tabla de destino y los desencadenadores se reemplazan en la tabla recién copiada.
- Se producirá un error al intentar cambiar el nombre o reubicar una tabla asociada a los resultados copiados de un desencadenador o con referencia a estos.
- Si el nombre del desencadenador en la definición del desencadenador no está completo, el desencadenador se creará en la base de datos que tiene el mismo nombre que la base de datos del desencadenador de origen.
- Si los nombres de tabla en la definición del desencadenador no están completos, esas tablas deben existir en la base de datos que tiene el mismo nombre que la base de datos del desencadenador de origen para evitar errores.
Ejemplo
Este ejemplo, se crea un desencadenador en el equipo de origen sin nombres de objeto completos en la definición:CREATE TRIGGER RaiseTrig AFTER INSERT ON Employee FOR EACH ROW ( INSERT INTO SalaryLog VALUES ('Hello','Hi',23, 43); );En este caso, al copiar el desencadenador en el destino se crea el desencadenador en la base de datos cuyo nombre coincide con el de la base de datos del desencadenador de origen. Si las tablas de empleados y de registro de sueldos no existen, se producirá un error.
No se pueden copiar los desencadenadores entre sistemas Teradata y Hadoop.