Según el modo de activación, los activadores de Oracle se dividen en dos tipos: nivel de declaración y nivel de fila. ¿Qué tipo de disparador se crea en la vista?
1. Activador de inserción
2. Activador de actualización
3. >Componentes del disparador:
Declaración del disparador, especificando el tiempo del disparador, el evento, el nombre de la tabla y el tipo.
Ejecución de triggers, bloques PL/SQL o llamadas a procedimientos.
Las condiciones restrictivas del disparador se implementan a través de la cláusula donde.
Tipo:
Disparador de aplicación, proporcionado por herramientas de desarrollo front-end;
Disparador de base de datos, definido como desencadenado por ciertas condiciones dentro de la base de datos;
Disparador DML;
Disparador a nivel de base de datos;
Disparador alternativo;
Componente disparador DML:
1 Tiempo de activación
2. Evento de activación
3. Nombre de la tabla
4. Tipo de activación
5. /p>
6. Cuerpo del disparador
Objetos que pueden crear disparadores: tablas de bases de datos, vistas de bases de datos, patrones de usuario e instancias de bases de datos.
Crear disparador DML:
Crear [o reemplazar] disparador [patrón. ] Nombre del activador.
Antes | después de insertar | eliminar |(Actualizar nombre de columna)
Acerca del nombre de la tabla
[Cada fila]
Cuando condición
Bloque PL/SQL
El significado de Para cada fila es: en la declaración que opera la tabla una vez, cada operación exitosa se activará una vez si no se escribe, es decir; que se activa en el nivel de tabla, por lo que no importa cuántas filas se operen, solo se activará una vez;
La aparición de la condición When indica que el activador puede activarse durante el DML. operación, pero es posible que el gatillo no necesariamente realice el trabajo real.
Por ejemplo, cuando la condición después de cuándo no es verdadera, el disparador simplemente omite el bloque PL/SQL;
Crea un disparador de inserción:
Crea o reemplaza el disparador tg_insert
p>Antes de insertar estudiantes
Inicio
dbms_output.put_line('El activador de inserción es chufa le....);
Fin ;
/
Efecto de ejecución:
SQL gt inserta estudiante
2 valores (202,'Dong Qian',' f ');
El activador de inserción es chufa le.....
Ejemplo de activador de actualización a nivel de tabla:
Crear o reemplazar el activador tg_updatestudent p>
Después de la actualización del estudiante
Inicio
DBMS _ salida . put _ line(' el activador de actualización es chufale....); ;
/
Efecto de la operación:
SQL gt update Student set se = ' f
El activador de actualización es chufale... ..
Se han actualizado 8 filas;
Como puede ver, el disparador a nivel de tabla solo se activa una vez cuando se actualizan varias filas;
Si Agregue
Para que cada fila después de la actualización del estudiante se convierta en un activador de nivel de fila. El efecto de ejecución es:
SQL gt update Student set se = ' m
El disparador de actualización es chufale.....
El disparador de actualización es chufale.....
El disparador de actualización es chufale.....
El disparador de actualización es chufale.....
El disparador de actualización es chufale.....
El disparador de actualización es chufale.....
El disparador de actualización es chufale.....
Se han actualizado 8 filas;
: new y :old: deben usarse para activadores a nivel de fila, es decir, los activadores que usan estas dos variables deben estar disponibles para cada fila.
Estas dos variables son variables de matriz proporcionadas automáticamente por el sistema: nueva se usa para registrar valores recién insertados y antigua se usa para registrar valores eliminados.
Cuando se usa insertar, solo: nuevo Hay un valor en:
Cuando se usa eliminar, hay un valor en: antiguo
Cuando se usa actualizar, hay un valor en: nuevo y: antiguo ; p>
Se puede utilizar así: DBMS_output. put_line ('insertar disparador es chufa.
dbms_output.put_line('El nuevo id es:' ||: new.stui
dbms_output.put_line('El nuevo nombre es:' ||: new.st p>
dbms_output.put_line('New se is: ' | |: new . se);
Puedes verificar los activadores en la tabla desde el diccionario de datos de la siguiente manera:
SQL gt selecciona el nombre del activador del activador del usuario
2donde nombre_tabla = superior(' estudiante ');
Nombre del activador
-
TG_insert
TG_updateStudent
El activador de eliminación a nivel de fila contiene: variable antigua:
Crear o reemplazar el activador tg_deletestudent
Antes de eliminar estudiantes p>
Para cada línea
Inicio
DBMS _ salida . put _ line(' old is: ' | |: old . stuid);
dbms_output.put_line('nombre antiguo:' | |: antiguo . stuname);
Fin;
/
Efecto de la operación:
SQL gt se elimina de los estudiantes;
El anterior es: 202
Nombre anterior: Dong Qian
Nombre anterior: 101
Nombre antiguo: Andy Lau
Nombre antiguo: 102
Nombre antiguo: Ling Qingxia
Nombre antiguo: :103
Nombre antiguo: Li Changgong
Nombre antiguo: 104
Nombre antiguo: Zhen Xiuwen
Nombre antiguo: 1001
Nombre antiguo: Jet Li
Nombre antiguo: 1009
Nombre antiguo: Thong Lai Fok
Nombre antiguo: 203
Nombre antiguo: kfdj
El anterior es: 209
Nombre anterior: joder
Se han eliminado 9 líneas
Uso de Cuándo: si está en Agregar cuándo (antiguo .se='f ') antes de comenzar, es decir, el bloque PL/SQL que ejecuta el disparador, y la operación DML se completará correctamente, pero solo se eliminará
Se='f. '. La línea solo ejecutará la acción principal del disparador y el efecto de ejecución será:
SQL gt se elimina del estudiante;
El anterior es: 209
p>Nombre anterior: Operación
Se han eliminado 9 filas; aunque aquí se han eliminado 9 filas, el cuerpo del disparador solo se ejecuta una vez como un disparador a nivel de fila;
Disparador mixto:
Los tres predicados de inserción, eliminación y actualización pueden indicar qué operación es la operación actual.
Crear o reemplazar disparador híbrido
Antes de insertar, actualizar o eliminar estudiantes
Para cada fila
Inicio
p >Si se inserta, entonces
dbms_output.put_line('insert le... ');
Finalizar si;
Si se elimina, entonces
dbms_output.put_line('eliminar archivo...);
Finalizar si;
Fin;
/
Al insertar, determina automáticamente que la acción actual es insertar:
SQL gt se inserta en los valores del estudiante (303, 'I', 'f');
Insertar música...
Al eliminar, la acción actual se considera automáticamente eliminada:
SQL gt se elimina del estudiante;
Eliminar Le....
Tenga en cuenta que dado que el cuerpo PL/SQL dentro del disparador es una declaración, también puede ser una operación de inserción y eliminación, no solo dbms_output imprime información;
Este es el principio de la tabla de registro: cuando el usuario ejecuta una declaración DML, el sujeto del activador es el activador insertado en la tabla de registro para registrar el seguimiento de la operación;
¿Por qué utilizar activadores? Cuando tenemos dos tablas para registrar las mercancías que entran y salen del almacén, se utiliza good_store para registrar la categoría de producto y la cantidad del inventario.
Good_out se utiliza para registrar la categoría y cantidad de productos enviados fuera del almacén, por lo que siempre que tengamos una cierta cantidad de productos enviados fuera del almacén, debemos insertar la categoría y cantidad del producto en bueno_fuera.
Cantidad saliente, y usar update en la tabla good_store para actualizar la cantidad de productos en el inventario de la categoría correspondiente, esto nos da dos tareas que debemos completar: insertar good_out.
Actualizar la tabla good_store después de la tabla, este proceso manual nos hace sentir feos. Si solo hace uno de estos, los datos serán inconsistentes. Entonces ahora podemos usar disparadores
La operación de inserción de la tabla Good_out está vinculada al disparador de actualización de good_store, por supuesto, este proceso debe ser una transacción; No tiene que preocuparse por insertar en la tabla good_out, la acción desencadenante vinculada a esa acción no se ejecutará. Creo que Oracle está diseñado para ser atómico.
Nota: Los activadores ralentizarán la instrucción SQL original.
Reemplazar activadores:
Los activadores creados en las vistas son activadores opcionales. Solo puede ser una fila. disparador de nivel;
¿Por qué utilizar un disparador alternativo?
Si tiene una vista basada en una consulta de combinación de campos de varias tablas; ahora, si desea insertarla directamente en esta vista, entonces debe estar pensando en mi inserción en la vista.
¿Cómo se refleja en las tablas que componen la vista? De hecho, no tiene otra forma de insertar datos directamente en la vista a través del informe de errores del sistema que no sea definir un activador para vincularlo a la acción de inserción en la vista. Es por eso que usamos un activador de anulación. En realidad, significa que el principal; parte del disparador convierte la operación de inserción de la vista en la inserción detallada de cada tabla;
Tabla de variantes: la tabla de variantes es la tabla que está siendo modificada por la instrucción SQL actual, por lo que está vinculada a la variante Los disparadores de tabla no pueden usar la función cout().
La razón es muy simple: la declaración SQL acaba de modificar la tabla, ¿cómo contarla?
Tabla de restricciones:
Mantenimiento:
Cambiar disparador…..desactivar; hacer que el disparador no esté disponible;
Cambiar disparador...habilitar ; active el disparador;
Paquete de software integrado de Oracle
Amplía la funcionalidad de la base de datos;
Proporciona a PL/SQL acceso a funciones SQL;
Generalmente utilizado por altos directivos con autoridad en sistemas;
Un paquete típico es dbms_output, y siempre se utiliza su procedimiento put_line();
Dbms_standard proporciona herramientas de lenguaje ;
Dbms_lob opera Oracle LOB, que está diseñado para operaciones de big data;
Dbms_lock bloqueo definido por el usuario;
Dbms_job permite programar procesos PL/SQL; p>
Dbms_alert admite la notificación asincrónica de eventos de la base de datos;
1 Algunos programas de DBMS_output:
a): Habilitar
b): Deshabilitar<. /p>
C): put solo coloca los datos en el caché (caché SQL-Plus, en realidad toda la ventana), sin función de salida;
D): put_line puede generar todos los datos previamente colocados en el caché; y cambie a la siguiente línea
e): nueva línea
f): get_line
g): Get_line
2. dmbs_lob, este paquete solo puede ser utilizado por administradores del sistema;
Clob puede almacenar hasta 2 g de datos de caracteres;
Blob puede almacenar hasta 4 G de datos binarios;
Nclob se almacena en caracteres Unicode;
Ejemplo de lista de descarga de archivos:
Crear tabla de directorio de descarga:
p>Crear una lista de archivos descendentes de tabla
(
id varchar(20) no es una clave primaria vacía,
nombre varchar(40) no está vacío,
Ubicación del archivo bfile,
Descripción clob
)
/
Crear directorio:
Crear o reemplace el directorio filedir con "f:\oracle"
/ Simplemente registra el directorio con Oralce, pero en realidad no crea el directorio en el disco. Oracle no tiene derechos para administrar y bloquear operaciones. El sistema de archivos del sistema;
Insertar datos en el directorio:
Insertar en la lista de archivos descendente
Valor(' 10001 ', 'Guía de programación de Oracle PLSAL', bfilename (upper ('filedir '), 'demo.mp3'), 'Esto es música mp3').
Insertar en la lista de archivos inferior
Value('10002','java Power',bfilename(upper('filedir'),'x.jpg'),'Good Super Girl ' )
/demo.mp3, x.jpg en realidad se almacena en el directorio f:\Oracle de filedir;
Tenga en cuenta que si intenta realizar una consulta, el efecto es:
sys gtselect * from downfilelist
SP2-0678: No se pueden mostrar tipos de columnas o atributos a través de SQL*Plus.
Debido a que la tercera columna no se puede mostrar, es binaria.
A continuación se utilizan algunos programas de dbms_lob para operar:
1. >
Declaración
tempdesc clob
ireadcount int
istart int
soutputdesc varchar(100);
Iniciar
ireadcount:=5;
istart:=1;
Seleccione la descripción de downfilelist a tempdesc donde id = '10001';
p>
dbms_lob.read(tempdesc, ireadcount, istart, soutputdesc); Lee los datos en tempdesc de tipo clob en soutputdesc de tipo carácter
dbms_output.put_line('Los primeros 5 los caracteres son: ' | soutputdesc);
Fin;
/Tenga en cuenta que para Unicode, los caracteres chinos y las letras ocupan el mismo número de dígitos;
2 Función getlength
p>Seleccione la descripción de downfilelist a tempclob donde id = '10001';
ilen:=dbms_lob. GetLength(tempclob);
Agregar, copiar...
Descubrí que cuando seleccionas X a Y, Y no es una copia independiente de X, porque cuando modificas Y X también se modifica;
3. función fileexists
seleccione id, el archivo DBMS _ lob (ubicación del archivo) de la lista de archivos inferior.
Si el archivo del sistema especificado por ubicación de archivo existe en el directorio bajo el sistema especificado por el campo de tipo de archivo ubicación de archivo, entonces se devuelve int 1, de lo contrario se devuelve 0
Esto muestra que; Oracle aún puede detectar el sistema. La situación del archivo es como las clases en el paquete java.io;
Las funciones de operación para datos de tipo bfile incluyen fileisopen, fileopen, fileclose, etc.;