prestar atención al desarrollo del punto de disparo
- Gatillo no recibe parámetros
- Cuanto más el gatillo, menor será el rendimiento operativo de LMD
- Disparador de un máximo de 32k, si los procedimientos PL / SQL declaración demasiado, se puede escribir almacenados, disparadores llamada
- En la parte dispositiva del gatillo declaraciones sólo pueden DML (insertar, seleccionar, actualizar, eliminar), no puede utilizar las instrucciones de DDL (crear, alterar, borrar)
- Gatillo no puede contener sentencias de control de transacción (commit, rollback, punto de rescate), como parte de un disparador declaración se activa, sentencia activadora presentó una reversión, el gatillo se ha comprometido también, corrida, y procedimiento de llamada cuerpo del disparador la función no se puede utilizar las instrucciones de control de transacciones
- Gatillo cuerpo no puede declarar cualquier tiempo y blog variables de nuevo y ,:: mesa de edad no puede ser cualquier columna larga o un blog
- Una tabla puede tener un máximo de 12 disparadores, y al mismo tiempo, el mismo evento, el mismo tipo de disparador sólo puede tener una, ni contradicciones entre los diversos flip-flops
1 - inserto事件触发器 2 antes de inserto / antes de inserción para cada fila 3 después de inserto / después de inserción para cada fila 4 - actualización事件触发器 5 antes de actualización / antes de la actualización para cada fila 6 después de actualización / después de actualización para cada fila 7 - delete事件触发器 8 antes de borrar / antes de borrar para cada fila 9 después de borrado / después de borrado para cada fila
Gatillo activar y desactivar
. 1 - Activar / Desactivar flip-flop individuo 2 ALTER disparador trigger_name {habilitar / deshabilitar}; 3. - Activar / desactivar todos los disparadores asociados con una tabla en particular 4. ALTER Tabla nombre_tabla {permiten / disable} Todos los disparadores;
sintaxis gatillo
. 1 Crear [ o reemplazar ] disparador trigger_name 2 {antes / Después} - tiempo de gatillo . 3 { Delete / INSERT / Actualización [ de la columna ] } - evento desencadenante . 4 EN Tabla . 5 [ para cada fila [DONDE (condición) ] ] 6 DECLARE . 7 - Variables locales aquí del papel pintado . 8 al comenzar . 9 PL / SQL 10 Fin ;
caso
1, insertar una palabra de datos de impresión
1 crear o sustituir el gatillo trg_test1 2 después de la inserción en la tabla 3 comienzan 4 dbms_output.put_line ( ' inserción exitosa! ' ) 5 final [ trg_test1 ] ;
2, los datos no se puede insertar en el fin de semana
. 1 Crear o Reemplazar disparador trg_test2 2 antes INSERT EN Tabla 3. DECLARE 4. T_day VARCHAR2 ( 10 ); . 5 el comenzar . 6 SELECT TO_CHAR (SYSDATE, ' Día ' ) EN t_day de Dual; . 7 SI t_day en ( ' Sábado ' , ' Domingo ' ) el entonces 8 - Lanza un error 9 RAISE_APPLICATION_ERROR ( - 20001 , ' no se puede insertar en el fin de semana de datos! ' ); 10 Fin SI ; 11. Fin [ trg_test2 ] ;
3, uso: viejo y: nuevo
declaración del activador | :antiguo | :nuevo |
insertar | Todos los campos son nulos | Los datos que se insertan |
actualizar | Valor antes de la actualización | El valor actualizado |
Eliminar | Valor antes de borrar | Todos los campos son nulos |
. 1 - se determina: actualización del valor original debe ser mayor que 2 Crear o reemplazar gatillo trg_test3 3. Antes de Actualización del COL EN Tabla 4. Para cada fila 5. Al comenzar 6. SI : old.col > : new.col al entonces . 7 RAISE_APPLICATION_ERROR ( - 20002 , ' valores actualizados menor que el valor original no se puede actualizar! ' ); . 8 Fin SI ; . 9 End [ trg_test3 ] ;