Creación de disparadores de Oracle. Activadores de ORACLE FORMS para principiantes. Desencadenantes previos y posteriores

Activadores DML Un disparador DML es un objeto de base de datos relacional (un tipo especial de procedimiento almacenado) que hace que se ejecute un procedimiento PL/SQL almacenado (o integrado) cuando un usuario cambia datos en una tabla. El evento que controla el lanzamiento del disparador se describe en forma de condiciones lógicas. Por ejemplo, un intento de modificar datos en una tabla activa el disparador correspondiente al comando de manipulación de datos dado. La cantidad de activadores por tabla de base de datos es ilimitada. Normalmente, los desencadenadores se utilizan para implementar restricciones de integridad referencial, evitar cambios inconsistentes en la base de datos (manteniendo la integridad de la base de datos), realizar operaciones de modificación ocultas y reducir el tráfico de la red transfiriendo el procesamiento al servidor. Las operaciones de finalización de transacciones se ejecutan después de que se procesan los activadores.

Activadores DML Un disparador DML es un objeto de base de datos relacional (un tipo especial de procedimiento almacenado) que hace que se ejecute un procedimiento PL/SQL almacenado (o integrado) cuando un usuario cambia datos en una tabla. El evento que controla el lanzamiento del disparador se describe en forma de condiciones lógicas. Por ejemplo, un intento de modificar datos en una tabla activa el disparador correspondiente al comando de manipulación de datos dado. La cantidad de activadores por tabla de base de datos es ilimitada. Oracle admite tres tipos de desencadenadores: ANTES, EN LUGAR DE y DESPUÉS. Como es de esperar, los desencadenadores previos se llaman antes de que se procese una solicitud de inserción, actualización o eliminación, en su lugar se llama a los desencadenadores de reemplazo y los desencadenadores finales se llaman después de que se procesa la solicitud. Hay nueve tipos posibles de activadores: un activador de preinserción, actualización y eliminación, un activador de inserción, actualización y eliminación de reemplazo, y un activador posterior a la inserción, actualización y eliminación. Normalmente, los desencadenadores se utilizan para implementar restricciones de integridad referencial, evitar cambios inconsistentes en la base de datos (manteniendo la integridad de la base de datos), realizar operaciones de modificación ocultas y reducir el tráfico de la red transfiriendo el procesamiento al servidor. Las operaciones de finalización de transacciones se ejecutan después de que se procesan los activadores.

Activadores de nivel DML Cuando ejecuta un comando ACTUALIZAR, puede usar un disparador para verificar que los datos que se están modificando satisfacen las restricciones de integridad de la base de datos antes de realizar la operación (¡y se puede acceder a nuevos datos!). Después de realizar una operación utilizando un disparador, puede realizar el procesamiento de datos ocultos teniendo en cuenta los cambios entrantes (es posible que también haya datos antiguos disponibles). Cuando emite un comando INSERT, también puede verificar los datos antes de insertarlos en la tabla para asegurarse de que las restricciones de integridad sean válidas y luego realizar operaciones en los datos recién insertados. Al ejecutar el comando DELETE, puede verificar los datos antes de eliminarlos o restaurarlos después de eliminarlos. .

Sintaxis del comando CREATE TRIGGER Para crear un disparador, se proporciona un comando SQL especial, CREATE TPIGGER. Este comando crea un disparador en una tabla que pertenece al usuario. CREAR DISPARADOR [nombre del esquema. ]nombre del activador (ANTES|DESPUÉS) (INSERTAR|ELIMINAR|ACTUALIZAR ]) ])] ON [nombre del esquema. ] nombre de la tabla COMENZAR… FINALIZAR

Sintaxis del comando CREATE TRIGGER La palabra clave OR REPLACE indica un reemplazo incondicional de la prueba de activación anterior. Si no se especifica y el disparador está definido en la base de datos, el disparador anterior no se reemplaza y se devuelve un mensaje de error. La definición del activador consta de varias partes: * especificar el nombre del activador; * indicación del comando SQL al que pertenece el disparador; * especificando la tabla o vista para la cual se define el disparador; * establecer restricciones de activación; * establecer una acción en el cuerpo del gatillo. Si se omite el nombre del esquema, el desencadenador se crea en el esquema del usuario actual.

Sintaxis del comando CREAR DISPARADOR (ANTES|DESPUÉS) La duración de la acción desencadenante antes o después de ejecutar un comando de manipulación de datos. No se pueden definir dos desencadenantes para la misma operación con la misma duración. Al crear un activador, debe especificar a qué comando de manipulación de datos se aplica: INSERTAR, ELIMINAR o ACTUALIZAR. Para este último, puede especificar columnas específicas especificando la frase OF nombre_columna [, nombre_columna. . . ] en la cláusula ACTUALIZAR. La palabra clave ON especifica el nombre de la tabla o vista para la que se crea el activador. La palabra clave opcional ON EACH ROW especifica el disparador como un disparador de fila, es decir, activado en cada fila del conjunto de resultados del comando SQL. Si se omite, el disparador se activa sólo una vez al comienzo del procesamiento del comando. Por lo tanto, la condición "para cada fila" se activa sólo cuando hay filas (por ejemplo, la cláusula WHERE proporciona el valor verdadero de los términos de búsqueda), mientras que para la condición "para cada comando" el disparador también se activará en ese caso. . Se pueden especificar condiciones adicionales que restringen el alcance del desencadenador en la cláusula WHEN. Las condiciones especificadas en esta cláusula son condiciones SQL estándar, deben contener nombres de correlación y no pueden contener una consulta. Esta cláusula solo se puede especificar para un desencadenador en línea.

Participar en transacciones De forma predeterminada, los activadores DML participan en las transacciones desde las cuales se activan, es decir: si el activador genera una excepción, entonces la parte correspondiente de la transacción se revertirá. Si el activador ejecuta algunas declaraciones DML (por ejemplo, inserta un registro en una tabla de diario), dichas declaraciones DML pasan a formar parte de la transacción principal. No puede utilizar declaraciones COMMIT o ROLLBACK dentro de un activador DML. Si utiliza un disparador DML como transacción independiente, cualquier comando DML ejecutado dentro del disparador se guardará o revertirá mediante una instrucción COMMIT o ROLLBACK explícita, sin afectar la transacción principal.

Pseudoregistros NUEVOS y ANTIGUOS Cuando se activa un disparador de nivel de fila, el motor de ejecución PL/SQL crea y completa dos estructuras de datos que actúan como registros. Estos son pseudoregistros NUEVOS y ANTIGUOS (el prefijo “pseudo” se explica por el hecho de que no tienen todas las propiedades de los registros PL/SQL reales). OLD almacena los valores iniciales del registro procesado por el disparador y NEW almacena los nuevos valores. Estos registros tienen la misma estructura que el registro declarado utilizando el atributo %ROWTYPE según la tabla a la que se relaciona el activador. Reglas al trabajar con pseudoregistros NUEVOS y ANTIGUOS: para los activadores relacionados con los comandos INSERT, la estructura ANTIGUA no contiene ningún dato, el conjunto de valores "antiguo" no existe. Para los disparadores relacionados con los comandos DELETE, la estructura NEW no contiene ningún dato, ya que estamos hablando de eliminar un registro. Está prohibido cambiar los valores de los campos de la estructura ANTIGUA; intentar hacerlo generará el error ORA 04085. Está permitido cambiar los valores de los campos de la estructura NUEVA.

Pseudoregistros NEW y OLD La estructura NEW u OLD no se puede pasar como parámetro de tipo de registro a un procedimiento o función llamada dentro de un activador. Sólo se pueden transferir campos de pseudoregistros individuales. gentrigrec. sp es un programa que genera código que pasa valores a registros NUEVOS y ANTIGUOS, que ya se pueden pasar como parámetros. Al hacer referencia a una estructura NUEVA o ANTIGUA dentro de un bloque activador anónimo, debe preceder las palabras clave apropiadas con dos puntos, por ejemplo: IF: NUEVO. salario > 10000 ENTONCES. . . No se admite la realización de operaciones a nivel de registro en estructuras NUEVAS y ANTIGUAS. Por ejemplo, un código como este provocará un error al compilar el disparador: BEGIN: NEW: = NULL; FIN;

Pseudoregistros NUEVO y ANTIGUO Operador activador: ANTIGUO: NUEVO INSERTAR Indefinido, todos los campos contienen valores NULL Valores que se ingresarán después de ejecutar el operador. ACTUALIZAR Valores originales contenidos en la fila antes de actualizar los datos Nuevos valores que se ingresarán después de la declaración DELETE Valores originales contenidos en la fila antes de que se eliminara Indefinido, todos los campos contienen valores NULL

Ejemplo 1 de creación de activadores: uso de activadores de entrada para comprobar la validez Digamos que una galería (consulte el estudio de caso en el Capítulo 1) tiene la regla de que ninguna obra puede venderse por menos del 90% del precio de venta. Para hacer cumplir esta regla, puede escribir un activador de actualización en la tabla TRANSACTION que compare los valores de venta. Precio y Ventas. Precio. Si se infringe la regla, en la columna Preguntar. El precio se fija al valor original. Se pueden utilizar dos estrategias. Una es escribir un disparador previo que verifique y restablezca, si es necesario, el valor de la columna Ventas. Precio antes de realizar la actualización. La segunda estrategia es escribir un disparador final que verifique y reescriba la fila de la tabla TRANSACTION después de la actualización.

Ejemplo 1 de creación de un disparador CREAR O REEMPLAZAR DISPARADOR TRANS_Sales. Precio. Verifique ANTES DE ACTUALIZAR LA TRANSACCIÓN PARA CADA FILA COMIENZAR SI: nuevo. Ventas. Precio

Ejemplo 1 de creación de un activador Lógica de activación: si el nuevo precio de venta es inferior al 90% del precio solicitado, el precio de venta se establece igual al precio solicitado. El nuevo precio de venta se compara con el antiguo precio de venta; de lo contrario, al cambiar ambos precios, sería posible realizar con éxito una actualización que viole esta restricción. En caso de que esto sea exactamente lo que sucedió, la columna Preguntar. El precio en la declaración ACTUALIZAR está establecido en: antiguo. Preguntando. Precio. Este disparador se llamará de forma recursiva. Una instrucción UPDATE en un disparador hará que se actualice la tabla TRANSACTION, lo que a su vez hará que se vuelva a llamar al disparador. Esta vez, sin embargo, la columna Ventas. El precio será igual a: antiguo. Preguntando. Precio, por lo que no se realizarán nuevas actualizaciones y se detendrá la recursividad.

Ejemplo 2 de creación de un activador Uso de activadores para asignar valores predeterminados A las columnas de la tabla se les pueden asignar valores predeterminados utilizando el calificador DEFAULT. Como tales valores, puede especificar constantes o los resultados de calcular expresiones simples. Si establecer un valor predeterminado requiere una lógica más compleja, debe utilizar un disparador. Supongamos que la galería tiene una regla que fija el precio de venta de una obra al doble de su costo de adquisición, o la suma del costo total de adquisición y los ingresos netos de las ventas pasadas de la obra. Esta regla se implementa mediante un disparador de finalización.

Ejemplo 2 de creación de un disparador La vista que se utiliza en el disparador en cuestión tiene siguiente vista: CREAR VER Artista. Trabajar. Neto COMO SELECCIONAR W. Trabajo. DNI, Nombre, Título, Copia, Adquisición. Precio, Ventas. Precio, (Ventas. Precio Adquisición. Precio) AS Neto. Precio DE LA TRANSACCIÓN T UNIRSE AL TRABAJO W EN T. Trabajo. ID = W. Trabajo. ID ÚNETE AL ARTISTA A EN W. Artista. DNI = A. Artista. IDENTIFICACIÓN;

Ejemplo 2 de creación de un conjunto de disparadores CREAR O REEMPLAZAR DISPARADOR. Preguntando. Precio ANTES DE INSERTAR EN LA TRANSACCIÓN PARA CADA FILA DECLARAR promedio. Neto. Precio numérico(8, 2); nuevo. Precio numérico(8, 2); entero de recuento de filas; COMENZAR SELECCIONAR Contar(*) EN el recuento de filas DESDE LA TRANSACCIÓN DONDE Trabajar. ID = : nuevo. Trabajar. IDENTIFICACIÓN; SI número de filas = 0 ENTONCES: nuevo. Preguntando. Precio: = 2*(: nuevo. Adquisición. Precio); DE LO CONTRARIO, SELECCIONE PROMEDIO (Precio neto) EN PROM. Neto. Precio DEL Artista. Trabajar. Neto AW DONDE AW. Trabajar. ID = : nuevo. Trabajar. GRUPO DE ID POR AW. Trabajar. IDENTIFICACIÓN; nuevo. Precio: = promedio. Neto. Precio + : nuevo. Adquisición. Precio; SI es nuevo. Precio > 2*(: nuevo. Adquisición. Precio) ENTONCES: nuevo. Preguntando. Precio: = nuevo. Precio; MÁS: nuevo. Preguntando. Precio: = 2*(: nuevo. Adquisición. Precio); ENDIF; FIN;

Ejemplo 2 de creación de desencadenador El desencadenador primero cuenta el número de filas en la tabla TRANSACTION que tienen el valor Trabajo. ID es igual a: nuevo. Trabajar. IDENTIFICACIÓN. Dado que se trata de un desencadenante previo, la obra de arte aún no se ha agregado a la base de datos y el recuento será cero si la obra de arte no ha aparecido antes en la galería. En este caso: nuevo. Preguntando. El precio se fija igual al doble del valor de Adquisición. Precio. Si la obra de arte apareció en la galería en el pasado, el beneficio neto promedio de su venta se calcula utilizando la vista Artista. Trabajar. Neto. Después de esto, se calcula la nueva variable. Precio como suma del beneficio neto medio y el coste de adquisición. Por último: nuevo. Preguntando. El precio se asigna al mayor de los dos valores: nuevo. Precio o duplicar el valor de Adquisición. Precio. Dado que el disparador es un disparador previo, puede usar la función AVG incorporada para promediar: la nueva fila aún no se ha agregado a la tabla TRABAJO, por lo que no se tendrá en cuenta al calcular el promedio. Si en alguna de las líneas del Artista. Trabajar. Ventas netas de la columna. Precio o Adquisición. El precio está vacío, esto puede causar problemas al calcular en el disparador.

Ejemplo 3 de creación de un activador Activador que actualiza una vista Actualizar vistas puede resultar difícil en algunos casos. Uno de esos problemas se refiere a las vistas creadas mediante la operación de unión. Considere la vista CustomerInterests: CREAR VISTA Cliente. Intereses AS SELECT C. Nombre COMO Cliente, A. Nombre COMO Artista FROM CLIENTE CON JOIN CUSTOMER_ARTIST_INT C 1 ON C. Clientel. D = C 1. Cliente. D ÚNETE AL ARTISTA A EN C 1. Artista. DNI = A. Artista. IDENTIFICACIÓN; Contiene filas de las tablas CLIENTE y ARTISTA, conectadas a través de una tabla de intersección. Columna CLIENTE. El nombre recibe el alias Cliente y la columna ARTISTA. Nombre - Artista.

Ejemplo 3 de creación de desencadenador Una solicitud para cambiar el nombre de un cliente en la vista CustomerInterests se puede interpretar como una solicitud para cambiar la columna Nombre en la tabla CLIENTE. Dicha solicitud solo se puede procesar si el nombre es único en la tabla CLIENTE. De lo contrario, será imposible determinar qué fila se debe actualizar. El activador de reemplazo actualiza el nombre del cliente si ese nombre es único en la base de datos. En lugar de contar el número de filas con un nombre de cliente determinado y actualizar solo si solo hay una de esas filas, el disparador fuerza que la actualización NO EXISTA. Este diseño de disparador permite a Oracle optimizar la declaración SQL y da como resultado un mejor rendimiento. CREAR O REEMPLAZAR TRIGGER Intereses del cliente. JJpdate EN LUGAR DE ACTUALIZAR LOS intereses del cliente PARA CADA FILA COMENZAR ACTUALIZAR CLIENTE C 1 SET C 1. Nombre = : nuevo. Cliente DONDE C 1. Nombre = : antiguo. Cliente Y NO EXISTE (SELECCIONE * DEL CLIENTE C 2 DONDE C 2. Nombre = C 1. Nombre AND C 2. Clientel. D C 1. Clientel. D); FIN;

Definición de una acción DML dentro de un disparador Oracle ofrece un conjunto de funciones (también llamadas directivas operativas) que le permiten determinar qué acción DML provocó que se activara el disparador actual. Cada una de estas funciones devuelve VERDADERO o FALSO. INSERTING Devuelve VERDADERO si el disparador se activó en respuesta a una inserción en la tabla a la que está asociado el disparador y FALSO en caso contrario. UPDATING Devuelve VERDADERO si el disparador se activó en respuesta a una actualización de la tabla a la que está asociado el disparador y FALSO en caso contrario. DELETING Devuelve VERDADERO si el disparador se activó en respuesta a una eliminación de la tabla a la que está asociado el disparador y FALSO en caso contrario. Usando estas directivas, puede crear un disparador común que combinará las acciones requeridas para varios tipos operaciones.

Activadores DDL Oracle le permite definir desencadenadores que se activarán en respuesta a la ejecución de declaraciones DDL (lenguaje de definición de datos). Una declaración DDL es cualquier declaración SQL utilizada para crear o modificar un objeto de base de datos, como una tabla o un índice. Cada una de estas declaraciones da como resultado la creación, modificación o eliminación de un objeto de base de datos. Algunos ejemplos de declaraciones DDL: CREATE TABLE ALTER INDEX DROP TRIGGER La sintaxis para crear dichos activadores es casi la misma que la sintaxis para crear activadores DML, la única diferencia son los eventos que los activan y el hecho de que los activadores DDL no se aplican a individuos. mesas.

Creación de un desencadenador DDL Para crear (o recrear) un desencadenador DDL, utilice la siguiente construcción: 1 2 3 4 5 6 7 8 CREAR [ O REEMPLAZAR ] DISPARADOR nombre_disparador ( ANTES | DESPUÉS ) (evento DDL ) ON ( BASE DE DATOS | ESQUEMA ) [ CUANDO (. . .) ) DECLARE Las declaraciones de variables COMIENZAN. . . código. . . FIN;

Eventos desencadenantes DDL ALTER Especifique ALTER para activar el desencadenador siempre que una instrucción ALTER modifique un objeto de base de datos en el diccionario de datos. Restricción de activadores en operaciones ALTER El activador no será activado por una instrucción ALTER DATABASE. ANALYZE Especifique ANALYZE para activar el disparador cada vez que la base de datos recopile o elimine estadísticas o valide la estructura de un objeto de base de datos. ANALIZAR para obtener información sobre diversas formas de recopilar estadísticas ASOCIAR ESTADÍSTICAS Especifique ASOCIAR ESTADÍSTICAS para activar el activador siempre que la base de datos asocie un tipo de estadística con un objeto de base de datos. AUDIT Especifique AUDIT para activar el activador siempre que la base de datos rastree la aparición de una declaración SQL o rastree operaciones en un objeto de esquema.

Eventos de activación DDL COMMENT Especifique COMMENT para activar el activador cada vez que se agregue un comentario sobre un objeto de base de datos al diccionario de datos. CREATE Especifique CREATE para activar el disparador cada vez que una instrucción CREATE agregue un nuevo objeto de base de datos al diccionario de datos. Restricción de desencadenadores en operaciones CREATE El desencadenador no será activado por una instrucción CREATE DATABASE o CREATE CONTROLFILE. DISASSOCIATE STATISTICS Especifique DISASSOCIATE STATISTICS para activar el disparador cada vez que la base de datos desasocia un tipo de estadística de un objeto de base de datos. DROP Especifique DROP para activar el desencadenador cada vez que una instrucción DROP elimine un objeto de base de datos del diccionario de datos. GRANT Especifique GRANT para activar el activador siempre que un usuario otorgue privilegios o roles del sistema o privilegios de objetos a otro usuario o a un rol.

Eventos de desencadenador DDL NOAUDIT Especifique NOAUDIT para activar el desencadenador siempre que una instrucción NOAUDIT indique a la base de datos que deje de rastrear una instrucción SQL u operaciones en un objeto de esquema. RENAME Especifique RENAME para activar el disparador cada vez que una declaración RENAME cambie el nombre de un objeto de base de datos. REVOKE Especifique REVOKE para activar el disparador siempre que una declaración REVOKE elimine privilegios o roles del sistema o privilegios de objetos de un usuario o rol. TRUNCATE Especifique TRUNCATE para activar el activador cada vez que una instrucción TRUNCATE elimine las filas de una tabla o clúster y restablezca sus características de almacenamiento. DDL Especifique DDL para activar el desencadenador cada vez que se emita cualquiera de las declaraciones DDL anteriores.

Src="https://present5.com/presentation/52581783_437368378/image-28.jpg" alt="Ejemplo de disparador DDL Ejemplo de un disparador que actúa como informante, anunciando la creación de todos los objetos: SQL>"> Пример триггера DDL Пример триггера, выполняющего роль информатора, объявляющего о создании всех объектов: SQL> CREATE OR REPLACE TRIGGER TRDDL_INF 2 AFTER CREATE ON SCHEMA 3 BEGIN 4 DBMS_OUTPUT. PUT_LINE("I believe you have created something!"); 5 END 6 / TRIGGER created.!}

Los desencadenadores de eventos de la base de datos se activan cuando ocurren eventos a nivel de base de datos. Hay cinco activadores de eventos de base de datos: Evento INICIO APAGADO Tiempo de ejecución permitido DESPUÉS ANTES SERVERERROR DESPUÉS DE INICIO DE SESIÓN DESPUÉS DE CIERRE DE SESIÓN ANTES Descripción Se activa después de que se inicia la instancia. Se activa cuando se detiene la instancia. Como nota, este evento no activa el disparador si el cierre de la base de datos es de emergencia. Se activa cuando ocurre un error ORACLE. Se activa después de que el usuario se conecta exitosamente a la base de datos. Se activa al inicio de una desconexión de usuario.

Creación de un activador de evento de base de datos La sintaxis utilizada para crear dicho activador es muy similar a la sintaxis para crear un activador DDL: 1 2 3 4 5 6 7 CREATE [ OR REPLACE ] TRIGGER nombre del activador ( ANTES | DESPUÉS ) ( evento_base de datos ) ON ( BASE DE DATOS | ESQUEMA ) DECLARE Declarar variables BEGIN. . . código. . . FIN;

Activadores de eventos de base de datos Estos activadores son una excelente manera de automatizar el proceso de administración de la base de datos y proporcionar un control granular sobre la base de datos. Existen una serie de restricciones sobre el uso de los atributos ANTES y DESPUÉS para ciertos eventos. Algunas situaciones simplemente parecen inútiles: no hay factores desencadenantes ANTES DEL INICIO. Un intento de crear un desencadenador de este tipo genera un mensaje de error: ORA 30500: desencadenadores de apertura de base de datos y error del servidor Los disparadores no pueden tener el tipo ANTES. No hay disparadores DESPUÉS DEL APAGADO. Un intento de crear un activador de este tipo genera un mensaje de error: ORA 30501: los activadores de cierre de instancia no pueden tener el tipo DESPUÉS

Activadores de eventos de base de datos No hay activadores ANTES DE INICIAR SESIÓN. Un intento de crear un activador de este tipo genera un mensaje de error: ORA 30508: los activadores de inicio de sesión del cliente no pueden tener el tipo ANTES. No hay activadores DESPUÉS DE CIERRE CIERRE. Un intento de crear un activador de este tipo genera un mensaje de error: ORA 30509: los activadores de cierre de sesión del cliente no pueden tener el tipo DESPUÉS. No hay activadores ANTES DE SERVERERROR. Un intento de crear un activador de este tipo genera un mensaje de error: ORA 30500: los activadores de apertura de la base de datos y los activadores de error del servidor no pueden tener el tipo ANTES.

Resumen: en este tutorial, aprenderá sobre otro bloque PL/SQL con nombre llamado disparador de Oracle. También aprenderá sobre los diferentes caracteres de los activadores y su uso en la base de datos.

¿Qué es un disparador de Oracle?

Un disparador es un bloque PL/SQL con nombre almacenado en la base de datos Oracle y ejecutado implícitamente cuando se produce un evento desencadenante. El evento puede ser cualquiera de los siguientes:

  • Una declaración de lenguaje de manipulación de datos ejecutada en una tabla, por ejemplo, o . Por ejemplo, si define un disparador para que se active antes de una instrucción INSERT en la tabla de clientes, este disparador se activa cada vez antes de insertar una nueva fila en la tabla de clientes.
  • Una declaración de lenguaje de definición de datos, por ejemplo, o una declaración ejecutada. Estos desencadenantes se utilizan a menudo con fines de auditoría para registrar cambios en el esquema.
  • Un evento del sistema, como el inicio o el cierre de la base de datos Oracle.
  • Un evento de usuario como iniciar sesión o cerrar sesión.

El acto de ejecutar un gatillo también se conoce como disparar un gatillo. Decimos que se dispara el gatillo.

Usos del disparador de Oracle

Los desencadenadores de Oracle son útiles en muchos casos, como los siguientes:

  • Hacer cumplir reglas comerciales complejas que no se pueden establecer mediante restricciones de integridad como NOT NULL, etc.
  • Prevenir transacciones inválidas.
  • Recopilación de información estadística sobre accesos a tablas.
  • Generando valor automáticamente para columnas derivadas.
  • Auditoría de datos sensibles.

Cómo crear un disparador en Oracle

Para crear un nuevo disparador en Oracle, utilice la siguiente instrucción CREATE TRIGGER:

DECLARAR

declaracióndeclaraciones

COMENZAR

declaraciones ejecutables

EXCEPCIÓN

declaraciones de manejo de excepción

FIN ;

Examinemos la sintaxis de la declaración CREATE TRIGGER con más detalle.

Un disparador tiene dos partes principales: encabezado y cuerpo. La siguiente es el encabezado del disparador:

CREAR DISPARADOR nombre_disparador

(ANTES | DESPUÉS) evento_activador EN nombre_tabla

Y aquí está el cuerpo del gatillo:

DECLARAR

declaracióndeclaraciones

COMENZAR

declaraciones ejecutables

EXCEPCIÓN

declaraciones de manejo de excepción

FIN ;

Como puedes ver el cuerpo del gatillo. tiene el misma estructura que un .

1) CREAR O REEMPLAZAR

La palabra clave CREATE especifica que eres creando un nuevo disparador. Las palabras clave OR REPLACE son opcionales. Se utilizan para modificar un disparador existente. Aunque las palabras clave OR REPLACE son opcionales, aparecen con la palabra clave CREATE en la mayoría de los casos.

Por ejemplo, si hoy define un nuevo disparador llamado trigger_example:

CREAR DISPARADOR trigger_example

Y en unos días decides modificar este disparador. Si no incluye las palabras clave OR REPLACE como:

Luego recibirá un mensaje de error que indica que otro objeto ya utiliza el nombre de su activador.

Entonces la declaración CREAR O REEMPLAZAR

CREAR O REEMPLAZAR trigger_example

creará un nuevo disparador si el disparador no existe o reemplazará el disparador existente.

2) Nombre del activador

Después de las palabras clave CREATE OR REPLACE está el nombre del activador.

3) ANTES | DESPUÉS

La opción ANTES o DESPUÉS especifica cuándo se activa el disparador, ya sea antes o después de un evento desencadenante, por ejemplo, INSERTAR, ACTUALIZAR o ELIMINAR.

table_name es el nombre de la tabla asociada con el activador.

4) PARA CADA FILA

La cláusula FOR EACH ROW especifica que un disparador es un disparador a nivel de fila y se activa una vez para cada uno fila insertada, actualizada o eliminada.

Tenga en cuenta que aprenderá sobre los desencadenantes a nivel de declaración en el tutorial siguiente.

5)ACTIVAR/DESACTIVAR

La opción HABILITAR/DESHABILITAR especifica si el disparador se crea en el estado habilitado o deshabilitado. Tenga en cuenta que si un disparador está deshabilitado, no se activa cuando ocurre el evento desencadenante.

De forma predeterminada, si no especifica la instrucción ENABLE/DISABLE, el disparador se crea con el estado habilitado.

6) SIGUE | PRECEDE a otro_trigger

Para cada evento desencadenante, por ejemplo, INSERTAR, ACTUALIZAR o ELIMINAR, puede definir varios desencadenadores para activar. En este caso, es necesario especificar la secuencia de disparo mediante la opción SIGUE o PRECEDE.

Creemos un disparador para ver cómo funciona.

Ejemplo de creación de un disparador de Oracle

Supongamos que queremos registrar acciones en la tabla de clientes cada vez que se actualiza o elimina una fila. Para hacer esto, primero, registramos los eventos ACTUALIZAR y ELIMINAR:

CREAR TABLA de auditorías(

audit_idNÚMERO generado POR DEFECTO COMO identidad CLAVE PRIMARIA,

nombre_tablaVARCHAR2(255),

nombre_transacciónVARCHAR2(10),

por_userVARCHAR2(30),

fecha_transacciónFECHA

En segundo lugar, creamos un nuevo disparador asociado a la tabla de clientes:

CREAR O REEMPLAZAR DISPARADOR customer_audit

DESPUÉS DE ACTUALIZAR O ELIMINAR EN clientes

DECLARAR

v_transactionVARCHAR2(10);

COMENZAR

Determinar el tipo de transacción

v_transacción:=CASO

AL ACTUALIZAR LUEGO "ACTUALIZAR"

AL BORRAR LUEGO "BORRAR"

FIN ;

Insertar una fila en la tabla de auditoría

INSERTAR EN auditorías (nombre_tabla, nombre_transacción, por_usuario, fecha_transacción)

VALORES ("CLIENTES", v_transaction,USUARIO,SYSDATE);

Oracle tiene más opciones para crear desencadenadores que Informix y Transact-SQL. Este DBMS también utiliza la instrucción de creación de disparadores para crear disparadores, pero su estructura es diferente. Al igual que Informix, le permite asociar un activador con diferentes etapas del procesamiento de solicitudes, pero en tres niveles diferentes:

Activador de nivel de instrucción(declaración) se llama una vez para cada declaraciones SQL. Se puede llamar antes o después de la ejecución.

Activador de nivel de grabación(fila) se llama una vez por cada fila que se modifica. También se puede llamar antes o después de la modificación;

Gatillo de repuesto(en lugar de OF) se ejecuta en lugar de la instrucción SQL. Al utilizar dicho activador, puede monitorear los intentos de una aplicación o usuario de actualizar, agregar o eliminar registros y, en su lugar, realizar sus propias acciones. Puede definir un activador que debe ejecutarse en lugar de alguna declaración o en lugar de cada intento de cambiar una fila de la tabla. el total es 14 varios tipos desencadenantes. Doce de ellos son combinaciones de operaciones de inserción, actualización y eliminación con opciones de antes o después en el nivel de fila o declaración (3x2*2) más dos activadores más del tipo en lugar de niveles de fila y declaración. Sin embargo, en la práctica, en lugar de desencadenadores OF, rara vez se utilizan en las bases de datos relacionales de Oracle; Se introdujeron en Oracle8 para admitir algunas de sus funciones más nuevas orientadas a objetos.

Preguntas adicionales relacionado con el uso de desencadenantes

En las bases de datos, los desencadenadores pueden tener las mismas reglas comerciales asociadas con las declaraciones de actualización y eliminación. Por ejemplo, un disparador puede provocar una serie de operaciones en cascada. Supongamos que se activa un disparador en respuesta a que un usuario intenta actualizar el contenido de una tabla. El cuerpo de este disparador ejecuta una declaración de actualización que actualiza otra tabla. El activador de esta segunda tabla puede actualizar otra tabla, y así sucesivamente. La situación empeora cuando uno de estos desencadenantes intenta actualizar la tabla fuente cuya actualización provocó toda la serie de operaciones. En este caso, se produce un ciclo interminable de activación del disparador.



EN varios DBMS Este problema se soluciona de diferentes maneras; en los sistemas de agua, el conjunto de acciones que pueden realizar los disparadores es limitado. Otros tienen funciones integradas que permiten que el disparador determine el nivel de anidamiento en el que opera. En tercer lugar, existen configuraciones del sistema que determinan si se permiten activadores "en cascada". Y existen sistemas que limitan el nivel de anidamiento de activadores en cascada.

El segundo problema con los disparadores es que durante las operaciones por lotes con la base de datos, por ejemplo al ingresar grandes cantidades de información en ella, los disparadores ralentizan enormemente la base de datos. Por lo tanto, algunos DBMS le permiten desactivar selectivamente los activadores en tales situaciones. Oracle, por ejemplo, proporciona esta forma de declaración de activación de modificación:

ALTERAR LA PRUEBA DE DISPARO DESHABILITAR;

La instrucción de activación de creación en Informix proporciona una capacidad similar.

Considere un ejemplo de creación de un activador en Sybase SQL Anywhere DBMS.





Los procedimientos y desencadenadores almacenan declaraciones SQL y declaraciones de control en una base de datos para que las utilice cualquier aplicación.

Mejoran la seguridad, eficiencia y estandarización de las bases de datos.

INSERT Ejemplo de activación de nivel de registro

El activador que se muestra a continuación verifica que la fecha de nacimiento ingresada para el nuevo empleado sea aceptable.

CREAR DISPARADOR check_birth_date

DESPUÉS DE INSERTAR EN Empleado

REFERENCIAR NUEVO COMO new_employee

DECLARAR err_user_error EXCEPCIÓN

PARA SQLSTATE '99999';

SI nuevo_employee.birth_date > ‘6 de junio de 1994’ ENTONCES

SEÑAL err_user_error;

El activador se llama inmediatamente después de agregar cualquier registro a la tabla. Detecta y no permite nuevos registros con fecha de nacimiento posterior al 6 de junio de 1994.

La construcción REFERENCING NEW AS new_employee permite a los operadores en el texto desencadenante hacer referencia a datos en un nuevo registro utilizando el alias new_employee.

Para una declaración INSERT que agrega varios registros a la tabla de empleados, se llama al activador check_birth_date para cada nuevo registro. Si el activador falla en al menos un registro, se descartan todos los cambios realizados por la instrucción INSERT.

Puede definir un disparador que se active antes de agregar la entrada; para ello, simplemente cambie la primera línea del ejemplo:

CREAR DISPARADOR mytrigger ANTES DE INSERTAR EN Empleado

La expresión REFERENCING NEW le permite hacer referencia a los valores de la entrada que se está agregando; y este enlace no depende del tipo de disparador (ANTES o DESPUÉS).

Un ejemplo de un activador a nivel de registro para una operación DELETE.

REFERENCIA A ANTIGUO COMO tabla antigua

La expresión REFERENCING OLD permite que el módulo activador haga referencia a los valores del registro que se elimina utilizando el alias de tabla antigua.

El disparador se puede convertir fácilmente a un tipo posterior cambiando la primera línea del ejemplo.

CREAR DISPARADOR mytrigger ANTES DE ELIMINAR AL empleado

La expresión REFERENCING OLD no depende del tipo de disparador (ANTES o DESPUÉS).

Un ejemplo de un activador a nivel de declaración para una operación ACTUALIZAR.

CREAR DISPARADOR mytrigger DESPUÉS DE ACTUALIZAR EL empleado

REFERENCIA NUEVO COMO table_after_update

ANTIGUO AS table_before_update

PARA CADA DECLARACIÓN

Las expresiones REFERENCING NEW y REFERENCING OLD permiten que el texto de activación haga referencia a los valores nuevos y antiguos del registro para el cual se está realizando la operación ACTUALIZAR. Las columnas con valores nuevos están disponibles a través del alias table_after_update, las columnas con valores antiguos a través del alias table_before_update.

Las expresiones REFERENCING NEW y REFERENCING OLD tienen diferentes significados para los activadores a nivel de declaración y a nivel de registro. Para los activadores a nivel de declaración, REFERENCING OLD o NEW son alias de tabla en un activador a nivel de registro y se refieren al registro que se está modificando.

Preguntas de seguridad

1. Enumere las ventajas y desventajas de los desencadenantes.

2. Características de la implementación de desencadenadores en Transact-SQL.

3. Características de la implementación de disparadores en el DBMS de Informix.

4. Características de la implementación de disparadores en Oracle PL/SQL.

5. Especifique la secuencia de creación del activador en Sybase Sql Anywhere.

Conferencia 13

Los desencadenadores se ejecutan automáticamente cuando se realiza una operación INSERTAR, ACTUALIZAR o ELIMINAR en las tablas a las que están asociados. Los activadores de nivel de registro se ejecutan para cada registro cambiable, los desencadenadores a nivel de declaración se ejecutan una vez para la declaración correspondiente, independientemente del número de registros que se modifiquen.

Cuando INSERTAR, ACTUALIZAR o ELIMINAR activa el disparo, el orden de las operaciones es el siguiente:

1 Algo ANTES de que se ejecute el disparador.

2 Se realizan acciones definidas por reglas de integridad referencial.

3 Se realiza la operación correspondiente.

Se ejecutan 4 activadores de tipo DESPUÉS.

Si se detecta un error en cualquier paso que no sea procesado por el procedimiento o desencadenador, todos los cambios realizados se cancelan, los pasos posteriores no se ejecutan y la operación que provocó que se activara el desencadenador falla.

Interfaces para interactuar con la base de datos.

Funciones SQL/CLI y su agrupación

Estructura del protocolo ODBC

Funciones ODBC y funciones extendidas de ODBC.

Protocolo ODBC y estándar SQL/CLI

ODBC (Open Database Connectivity - acceso abierto a bases de datos) es desarrollado por la empresa universal de microsoft Interfaz de software para acceder a bases de datos. Aunque en la computadora moderna mundo de microsoft juega papel importante Como fabricante de software de bases de datos, es ante todo uno de los principales fabricantes de sistemas operativos, lo que motivó la creación de ODBC: Microsoft quería facilitar a los desarrolladores de aplicaciones de Windows el acceso a las bases de datos. El caso es que los diferentes DBMS difieren significativamente entre sí, al igual que sus interfaces de software. Si un desarrollador necesitaba escribir una aplicación que funcionara con las bases de datos de varios DBMS, para cada uno de ellos tenía que escribir un módulo de interfaz separado (generalmente llamado conductor). Para evitar que los programadores realicen el mismo trabajo rutinario y bastante complejo, Microsoft decidió estandarizar la interfaz entre las aplicaciones y el DBMS a nivel del sistema operativo, para que todos los programas pudieran utilizar el mismo conjunto universal de funciones admitidas por todos los fabricantes de DBMS. De este modo, tanto los desarrolladores de aplicaciones como los fabricantes de DBMS se beneficiaron de la introducción de ODBC, para quienes también se resolvió el problema de compatibilidad.

Formación del estándar SQL/CLI

Incluso si ODBC fuera sólo el estándar de Microsoft, seguiría siendo muy importante. Sin embargo, Microsol intentó hacerlo independiente de un DBMS específico. Al mismo tiempo, la Asociación de Fabricantes de DBMS ( Acceso SQL Group) trabajó en la estandarización de protocolos para el acceso remoto a bases de datos en una arquitectura cliente/servidor. Microsoft convenció a la asociación para que adoptara ODBC como estándar de acceso a bases de datos independiente. Posteriormente, este estándar fue adoptado por otra organización, el European X/Open Consortium, y se incluyó en su conjunto de estándares CAE (Common Application Environment).

Con creciente popularidad interfaces de software Las organizaciones de acceso a bases de datos responsables de adoptar estándares oficiales han comenzado a prestar cada vez más atención a este aspecto de SQL. Basado en el estándar X/Open (basado en una nueva versión de ODBC desarrollada por Microsoft) con modificaciones menores, se desarrolló el estándar oficial ANSI/ISO. Este estándar, conocido como SQL/CLI (SQL/Call Level Interface), fue publicado en 1995 con el nombre ANSI/ISO/IEC 9075-3-1995. Representa la Parte 3 del estándar SQL3 multinivel emergente, que es un desarrollo del estándar SQL2 publicado en 1992.

Microsoft ha alineado ODBC con el estándar SQL/CLI, cuya implementación constituye el núcleo de su última versión del protocolo, ODBC 3. Sin embargo, conjunto completo Las características de alto nivel de ODBC 3 van mucho más allá de la especificación CLI: proporciona a los desarrolladores de aplicaciones capacidades mucho mayores y resuelve una serie de problemas específicos asociados con el uso de ODBC como parte del sistema operativo Windows.

Las ventajas de la combinación ODBC/CLI tanto para los desarrolladores de aplicaciones como para los fabricantes de DBMS eran tan obvias que ambos estándares recibieron rápidamente el más amplio apoyo. Casi todos los fabricantes de DBMS relacionales han incluido interfaces apropiadas en sus productos. ODBC y CLI Compatible con miles de aplicaciones, incluidas herramientas de desarrollo líderes.

El estándar SQL/CLI define unas cuarenta funciones (ver tabla). Sirven para conectarse a un servidor de base de datos, ejecutar declaraciones SQL, procesar resultados de consultas y manejar errores que ocurren durante la ejecución de declaraciones. Estas funciones proporcionan la gama completa de capacidades proporcionadas por SQL incorporado, incluido SQL estático y dinámico.

Funciones SQL/CLI

Descripción de la función

Administrar recursos y conexiones de bases de datos

SQLAllocHandle() Asigna recursos para el entorno SQL; sesión de conexión de base de datos, identificador CLI o declaración

SQLFreeHandle() Libera recursos previamente asignados

SQLAllocEnv() Asigna recursos para el entorno SQL.

SQLFreeEnv() Libera recursos asignados al entorno SQL

SQLAllocConnect() Asigna recursos para una sesión de conexión de base de datos

SQLFreeConnect() Libera recursos asignados para una sesión de conexión de base de datos

SQLAllocstmt() Asigna recursos para una declaración SQL

SQLFreeStmt() Libera recursos asignados para una declaración SQL

SQLConnect() Establece una conexión con la base de datos.

SQLDisconnect() Desconecta la conexión a la base de datos.

Ejecutar sentencias SQL

SQLExecDirect() Ejecuta directamente una declaración SQL

SQLPrepare() Prepara una declaración SQL para su posterior ejecución SQLExecute() Ejecuta una declaración SQL previamente preparada

SQLRowCount() Devuelve el número de filas procesadas por la última declaración SQL

Gestión de transacciones

SQLEndTran() Finaliza o aborta una transacción

SQLCancel() Cancela la ejecución de la instrucción SQL actual

Parámetros de procesamiento

SQLBindParam() Enlaza un parámetro de instrucción SQL a una dirección de búfer del programa

SQLParamData() Le dice a la aplicación la dirección del parámetro de declaración de preparación para el cual se deben proporcionar datos antes de que se pueda ejecutar la declaración.

SQLPutData() Proporciona datos para un parámetro de una declaración de preparación; esta función se puede llamar varias veces para pasar datos en partes

Procesamiento de resultados de consulta

SQLSetCursorName() Asigna un nombre a un conjunto de registros

SQLGetCursorName() Devuelve el nombre del conjunto de registros

SQLBindCol() Vincula una columna en una tabla de resultados de una consulta a un búfer de programa

SQLFetch() Devuelve la siguiente fila de la tabla de resultados de la consulta SQLFetchScroll() Devuelve la fila especificada de la tabla de resultados de la consulta SQLCloseCursor() Cierra un conjunto de registros

SQLGetData() Devuelve el valor de la columna especificada de la tabla de resultados de la consulta.

Descripción de los resultados de la consulta.

SQLNumResultCols() Devuelve el número de columnas en la tabla de resultados de la consulta.

SQLDescribeCol() Devuelve una descripción de la columna especificada en la tabla de resultados de la consulta.

SQLColAttribute() Devuelve información sobre el atributo especificado de una columna especificada en la tabla de resultados de la consulta.

SQLGetDescField() Devuelve el valor de un campo especificado desde un descriptor CLI SQLSetDescField() Establece el valor de un campo especificado desde un descriptor CLI SQLGetDescRec() Devuelve los valores de un conjunto de campos de un descriptor CLI SQLSetDescRec() Establece el valores de un conjunto de campos de un descriptor CLI

SQLCopyDesc() Copia el contenido de un descriptor CLI a otro

Manejo de errores

SQLError() Devuelve información sobre el error ocurrido durante la última llamada a la función CL1

SQLGetDiagField() Devuelve el valor del campo especificado de una estructura CLI especial que contiene información de diagnóstico.

SQLGetDiagRec() Devuelve los valores de un conjunto de campos de una estructura CLI especial que contiene información de diagnóstico.

Gestión de atributos

SQLSetEnvAttr() Establece el valor del atributo de entorno SQL especificado SQLGetEnvAttr() Devuelve el valor del atributo de entorno SQL especificado

SQLSetConnectAttr() Establece el valor del atributo de sesión de conexión de base de datos especificado

SQLGetConnectAttr() Devuelve el valor del atributo de sesión de conexión de base de datos especificado

SQLSetStmtAttr() Establece el valor del atributo de declaración SQL especificado SQLGetStmtAttr() Devuelve el valor del atributo de declaración SQL especificado

Gestión de conductores

SQLDataSources() Devuelve una lista de servidores de bases de datos disponibles

SQLGetFunctions() Devuelve información sobre las funciones CLI admitidas por el controlador actual

SQLGetlnfo() Devuelve información general sobre la fuente de datos y el controlador asociados con la sesión de conexión de base de datos especificada

SQLGetTypeInfo() Devuelve información sobre los tipos de datos admitidos

La mayoría de los programas que utilizan funciones CLI realizan la secuencia de acciones que se muestran a continuación:

El programa se conecta a la biblioteca CLI y asigna memoria para las estructuras de datos utilizadas por las funciones de esta biblioteca;

El programa se conecta a un servidor de base de datos específico;

El programa genera sentencias SQL en sus propios buffers de memoria;

El programa llama a funciones CLI mediante las cuales solicita al servidor que ejecute declaraciones SQL y aprende cuándo se han completado esas declaraciones;

Si las declaraciones SQL se completan correctamente, el programa utiliza otra función CLI para pedirle al servidor que complete la transacción;

El programa se desconecta del servidor de la base de datos y libera la memoria ocupada por las estructuras de datos.

Todas las funciones CLI devuelven un código de estado. Este valor indica un código de error o advertencia. En programas reales, es necesario verificar los códigos de estado para garantizar que cada función CLI llamada se realice correctamente.

Protocolo ODBC. Estructura ODBC.

La estructura del protocolo ODBC se muestra en la Fig. Software ODBC consta de tres capas principales:

Interfaz de llamada de función. En el nivel más alto de ODBC existe una única interfaz de programación que pueden utilizar todas las aplicaciones. Esta API se implementa como una biblioteca de vínculos dinámicos (DLL) que es una parte integral de Windows.

Controladores ODBC. En el nivel inferior hay un conjunto de controladores: un controlador para cada DBMS compatible. La tarea del controlador es traducir las llamadas a funciones ODBC estándar en llamadas a las funciones correspondientes admitidas por un DBMS específico (puede haber varias para una función ODBC). Cada controlador está instalado en Sistema operativo a pesar de todo. Esto permite a los fabricantes de DBMS desarrollar sus propios controladores para sus productos y distribuirlos independientemente de Microsoft. Si el DBMS está ubicado en el mismo sistema que el controlador ODBC, entonces el controlador generalmente llama directamente a las funciones API internas del DBMS. Si el acceso a la base de datos se realiza: a través de la red, entonces el conductor puede: a) dirigir todas las llamadas a la parte cliente del DBMS; que los redirigirá al servidor; b) gestionar de forma independiente una sesión de conexión de red a una base de datos remota.

Administrador de conductores. El nivel medio está ocupado por el Administrador de controladores ODBC, que es responsable de cargar y descargar controladores cuando las aplicaciones lo solicitan y de dirigir las llamadas a funciones ODBC realizadas por las aplicaciones a los controladores apropiados para su ejecución.

Cuando una aplicación necesita acceder a una base de datos a través de ODBC, sigue la misma secuencia inicial de pasos proporcionada por el estándar SQL/CLI. Primero, el programa obtiene el entorno y los identificadores de sesión y luego llama a la función SQLConnect(), especificando la fuente de datos específica con la que desea trabajar. En respuesta, ODBC Driver Manager analiza la información de conexión enviada por el programa y determina qué controlador necesita. El administrador carga este controlador en la memoria a menos que otro programa lo esté utilizando actualmente. Este controlador procesa todas las llamadas a funciones posteriores dentro de una sesión determinada. Luego, el programa puede llamar a la función SQLConnect() para conectarse a otras fuentes de datos, lo que provocará que se carguen controladores adicionales; pero, sin embargo, el acceso a varias bases de datos y a varios DBMS se realizará a través de un único conjunto de funciones.

Interacción independiente con varios DBMS

Con el desarrollo de una interfaz de programación universal y una arquitectura ODBC multinivel con distribución de llamadas, Microsoft ha logrado avances significativos hacia el acceso a las bases de datos independiente del DBMS, pero hacer que el acceso sea completamente transparente es casi imposible. Los controladores ODBC para diferentes DBMS pueden enmascarar fácilmente diferencias menores en sus interfaces de programación y dialectos SQL, pero las diferencias más fundamentales son difíciles o incluso imposibles de ocultar. ODBC resuelve parcialmente este problema dividiendo el conjunto completo de capacidades que ofrece en varios niveles funcionales e introduciendo un conjunto de funciones que permiten controlador ODBC“Cuéntele” a la aplicación sobre usted: bríndele información sobre sus capacidades, el conjunto de funciones admitidas y los tipos de datos. Sin embargo, la mera presencia de varios niveles de funcionalidad del controlador y el soporte selectivo del controlador para estas capacidades hace que la aplicación dependa del DBMS, aunque en un nivel diferente. Por lo tanto, en la práctica, la mayoría de las aplicaciones utilizan sólo funciones ODBC básicas.

Preguntas de seguridad

1. Determinar el propósito del protocolo ODBC.

2. Enumere los grupos de funciones incluidas en el protocolo ODBC.

3. Describe la estructura de ODBC.

4. Indique los beneficios de utilizar ODBC.

Conferencia 14

Funciones ODBC para trabajar con directorios del sistema.

Un área donde ODBC ofrece capacidades más allá del estándar SQL/CLI es la recuperación de información de la estructura de la base de datos del catálogo del sistema.

El estándar ODBC no requiere la presencia de un esquema de información en la base de datos.

En cambio, este protocolo incluye un conjunto de funciones especiales que proporcionan a la aplicación información sobre la estructura de la fuente de datos. Al llamar a estas funciones, una aplicación puede, mientras se ejecuta, obtener información sobre las tablas, columnas, privilegios, claves primarias y externas y procedimientos almacenados que conforman la estructura de la fuente de datos.

Las funciones ODBC diseñadas para trabajar con directorios del sistema generalmente no son necesarias en aplicaciones especializadas, pero los programas de propósito general, como los módulos de consulta, los generadores de informes y las utilidades de análisis de datos, pueden prescindir de dichas funciones. Estas funciones se pueden llamar en cualquier momento después de conectarse a una fuente de datos. Por ejemplo, un generador de informes podría llamar a SQLConnect() seguido inmediatamente de SQLTables() para averiguar qué tablas hay en la base de datos.

Todas las funciones que trabajan con directorios devuelven información en forma de tabla de resultados de consultas. Para obtener esta información, las aplicaciones utilizan los mismos métodos que se utilizan para obtener los resultados de consultas regulares ejecutadas a través de la CLI. Por ejemplo, el conjunto de registros generado por la función SQLTables() contendrá un registro para cada tabla de la base de datos.

Funciones ODBC para trabajar con directorios del sistema

Descripción de la función

SQLTables() Devuelve una lista de tablas en los catálogos y esquemas dados.

SQLTablePrivileges() Devuelve una lista de privilegios de las tablas dadas.

SQLColumns() Devuelve una lista de nombres de columnas para las tablas dadas.

SQLColumnPrivileges() Devuelve una lista de privilegios para las columnas especificadas de la tabla dada

SQLPrimaryKeys() Devuelve una lista de nombres de columnas que componen la clave principal de una tabla determinada.

SQLForeignKeys() Devuelve una lista de claves externas para la tabla dada y una lista de claves externas para otras tablas relacionadas con tabla dada

SQLSpecialColumns() Devuelve una lista de columnas que identifican de forma única una fila de la tabla o columnas que se actualizan automáticamente cuando se actualiza la fila.

SQLStatistics() Devuelve estadísticas sobre una tabla y sus índices.

SQLProcedures() Devuelve una lista de procedimientos almacenados para la fuente de datos especificada

SQLProcedureColumns() Devuelve una lista de parámetros de entrada y salida y nombres de columnas de retorno para los procedimientos almacenados especificados.

Funciones ODBC avanzadas

Como se mencionó, ODBC proporciona capacidades adicionales más allá de las definidas por el estándar SQL/CLI. Muchos de ellos están diseñados para mejorar el rendimiento de las aplicaciones que utilizan ODBC minimizando la cantidad de llamadas a funciones ODBC necesarias para realizar tareas comunes, así como reduciendo el tráfico de red cuando se trabaja con ODBC. Además, ODBC proporciona una serie de funciones que hacen que la aplicación sea más independiente del DBMS específico y ayudan a la aplicación a establecer una conexión con la fuente de datos. Algunas de las características adicionales de ODBC se implementan en forma de funciones que se muestran a continuación. El resto está controlado por instrucciones y atributos de sesión. Muchas de las funciones avanzadas de ODBC se introdujeron en la versión 3.0 de este protocolo y aún no todos los controladores las admiten.

Algunas características adicionales de ODBC

Descripción de la función

SQLBrowseConnect() Devuelve información sobre los atributos de la fuente de datos ODBC especificada que se deben configurar para conectarse a la fuente.

SQLDrivers() Devuelve una lista de controladores disponibles y sus nombres de atributos.

SQLDriverConnect() Una forma extendida de la función SQLConnect() para transferencias ODBC información adicional sobre la sesión de conexión

SQLNumParams() Devuelve el número de parámetros de la última sentencia SQL preparada

SQLBindParameter() Extiende las capacidades de la función SQLBindParam() SQLDescribeParam() Devuelve información sobre un parámetro de una declaración SQL

SQLBulkOperations() Realiza operaciones por lotes utilizando el mecanismo de marcador

SQLMoreResults() Determina si todavía hay registros sin procesar en la tabla de resultados de la consulta.

SQLSetPos() Establece la posición del puntero en el conjunto de registros resultante, lo que permite a la aplicación realizar operaciones posicionales en el conjunto.

SQLNativeSQL() Devuelve la traducción instrucciones dadas SQL al dialecto SQL "nativo" del DBMS con el que está trabajando

Función Opciones Acción
SQLCONEXIÓN() DataSourceName: nombre de la fuente de datos, cUserID: nombre de usuario, cPassword | cConnectionName]) – contraseña o nombre de conexión Establece una conexión con la fuente de datos ODBC especificada.
Devuelve un número entero positivo en caso de éxito, -1 en caso de error. SQLSETPROP(nConnectionHandle, cSetting [, eExpression]) nConnectionHandle – puntero a la conexión a la fuente de datos recibida de Sqlconnect(), cSetting – nombre del parámetro, eExpression – valor del parámetro; para cConfigurar modo por lotes asincrónico ConnectBusy ConnectString ConnectTimeOut DataSource DispLogin DispWarnings IdleTimeout ODBChdbc ODBChstmt PacketSize Contraseña QueryTimeOut Transacciones WaitTime Para una conexión de fuente de datos determinada, establece los valores de varios parámetros.
SQLEXEC(nConnectionHandle, ]) nConnectionHandle: puntero a la conexión a la fuente de datos recibida de Sqlconnect(), cSQLCommand: instrucción SQL pasada a la fuente de datos, CursorName: nombre del cursor donde se colocará el resultado, el valor predeterminado es SQLRESULT.
SQLPREPARE(nConnectionHandle, cSQLCommand, ) SQLEXECUTE(nConnectionHandle, cSQLCommand, ) Prepara una declaración SQL para su ejecución mediante la función SQLEXEC()
SQLGETPROP(nConnectionHandle, cConfiguración) Devuelve los valores actuales o predeterminados para la conexión activa.
SQLSTRINGCONNECT() Establece una conexión a una fuente de datos a través de una cadena de conexión
SQLCOMMIT(nConnectionHandle) Completa una transacción
SQLROLLBACK(nManejo de conexión) Deshace cualquier cambio realizado en la transacción actual
SQLMORERESULTADOS(nConnectionHandle) Copia el siguiente conjunto de datos al cursor VFP (si existe dicho conjunto de datos)
SQLDISCONNECT(nConnectionHandle)
SQLCANCEL(nConnectionHandle) Interrumpe la ejecución de la instrucción SQL actual.
SQLTABLES(nConnectionHandle [, cTableTypes] [, cCursorName]) Almacena nombres de tablas en una fuente de datos en un cursor VFP
SQLCOLUMNS(nConnectionHandle, TableName [, “FOXPRO” | “NATIVE”] [, CursorName]) Almacena una lista de nombres de columnas e información sobre cada columna de la tabla en la fuente de datos en un cursor VFP

Gestión de sesiones

Dos de las funciones avanzadas de ODBC están relacionadas con la gestión de sesiones. Mecanismo ver información de conexión diseñado para simplificar el proceso de conexión a una fuente de datos. Este mecanismo se basa en la función SQLBrowseConnect(). La aplicación primero llama a esta función, especifica el nombre de la fuente de datos y, en respuesta, recibe una descripción de los atributos necesarios para la conexión (como nombre de usuario y contraseña). El programa recoge información necesaria(por ejemplo, solicitándolo al usuario) y lo pasa a la función SqlBrowseConnect(), que devuelve una descripción de los atributos posteriores. El ciclo continúa hasta que la aplicación proporciona a ODBC toda la información necesaria para conectarse a la fuente de datos especificada. Una vez hecho esto, se establecerá la conexión.

Mecanismo agrupaciones de conexión diseñado para una gestión más eficiente de los procesos de establecimiento/interrupción de conexión en un entorno cliente/servidor. Cuando el modo de agrupación de conexiones está habilitado, ODBC no finaliza la sesión de conexión cuando recibe una llamada a la función SQLDisconnect(). Permanece en estado inactivo durante algún tiempo, y si durante este tiempo recibe nuevo desafío SQLConnect() funciona, ODBC simplemente activa la conexión existente (si, por supuesto, la aplicación necesita la misma fuente de datos). La reutilización de conexiones puede reducir significativamente los costos asociados con iniciar sesión (y luego cerrar sesión) en el sistema del servidor varias veces en aplicaciones que realizan una gran cantidad de transacciones cortas.

Guía de estudio.

Prefacio

Este documento contiene una descripción bastante breve de los desencadenantes utilizados en Formularios de Oráculo. El material principal para la creación del manual fue el sistema de ayuda para Developer 200 Forms Designer, el libro "Oracle User Encyclopedia", así como programas escritos directamente por el autor de este trabajo.

Al autor de este documento le parece que para completar una tarea estándar es necesario y quizás suficiente dominar los siguientes desencadenantes: WHEN_NEW_INSTANCE_FORM, WHEN_NEW_INSTANCE_ITEM, ON_CHANGE, WHEN_VALIDATE_ITEM, POST_QUERY, ON_ERR.

Acerca de eventos y desencadenantes

Los activadores son directamente piezas de código de programa que usted escribe para implementar la funcionalidad de su aplicación. Cada disparador tiene un nombre y contiene una o más declaraciones PL/SQL. Un disparador a nivel del entorno de desarrollo está asociado con algún evento y se ejecuta cuando ocurre este evento.

Los nombres de los desencadenadores corresponden a los eventos de tiempo de ejecución a los que están asociados. Por ejemplo, el disparador "Cuando se presiona el botón" corresponde al evento de clic del botón "Botón presionado", por lo que cuando el usuario presiona este botón, Oracle Forms llama a este disparador y ejecuta su código.

El disparador debe estar asociado directamente a algún objeto, como un foro, un bloque en un formulario, o algún elemento (campo de texto, botón, etc.) Por ejemplo, en un formulario con tres botones, cada uno de ellos tiene un Cuando- Se activa con un botón y cada uno de estos activadores contiene un código PL/SQL diferente. El usuario presiona un botón y se dispara el disparador adjunto a este botón (cuando se presiona el botón). Obviamente, otros disparadores cuando se presiona el botón conectados a otros botones no se activan.

Tipos de eventos

Oracle Forms maneja un conjunto específico de eventos, cada uno de los cuales tiene un disparador incorporado (lo que significa que no hay un código listo para usar, pero se puede escribir en este lugar). Los eventos se pueden dividir en grupos, cuyos principales se analizarán a continuación.

Eventos de interfaz

Los eventos de este grupo son obvios (asociados con elementos de la interfaz):

Evento: nombre del activador

  • Al presionar un botón -Cuando se presiona el botón
  • Hacer clic en una casilla de verificación (hacer clic en la casilla de verificacióna) -Cuando se cambia la casilla de verificación
  • Presionando la tecla Tab (presionando Tab-Key) Key-NxtItem

Eventos de procesamiento interno

Considere un formulario con dos bloques A y B, cada uno de los cuales tiene un campo de texto. Para las plataformas GUI, el usuario puede mover el foco de entrada de un elemento en el Bloque A a un elemento en el Bloque B haciendo clic en este último. Aunque esta operación implica solo una acción (hacer clic con el mouse en el elemento de bloque B), en realidad causa una serie de eventos, cada uno de los cuales puede tener su propio desencadenante. Veamos esta secuencia de eventos y sus desencadenantes asociados.

  • Evento: nombre del activador
  • Validar el elemento (se verifica que el elemento sea correcto en los datos ingresados)
  • Cuando-Validar-Artículo (coincide o no con ciertas condiciones)
  • Deje el elemento del elemento ("dejando") (eliminando el foco de entrada) -Post-Text-Item
  • Validar el registro (verificar el registro)-Cuando-Validar-Registro
  • Dejar el registro (“dejar el registro”)-Post-Record
  • Salir del bloque Post-Bloque
  • Ingresar al bloque (“activar el bloqueo”) - Pre-Bloqueo
  • Ingresar el registro (“activar el registro”)-Pre-Record
  • Ingrese el elemento (establezca el foco de entrada en el elemento) Pre-Text-Item
  • Bloque listo para entrada - Cuando-nueva-instancia-de-bloque
  • Registro listo para entrada Cuando-Nueva-Instancia-de-registro
  • Elemento listo para entrada Cuando-Nueva-Instancia-de-elemento

Es importante comprender que eventos de navegación como "Salir del elemento" e "Ingresar al bloque" ocurren durante la navegación interna del formulario, que corresponde a transiciones entre objetos en la jerarquía de Oracle Forms.

En este ejemplo, para mover el foco del elemento fuente al deseado, Oracle Forms primero verificó el valor en el elemento fuente, luego subió al nivel de registro y verificó todos los elementos del registro, luego al nivel de bloque, y así sucesivamente. hasta que terminé de configurar la preparación de entrada para el elemento deseado.

El modelo utilizado por Oracle Forms garantiza la integridad de los datos dentro de un elemento, registro, bloque y formulario. Para cada uno de los objetos enumerados en este modelo existe su propio nivel. Como se mostrará a continuación, para cada nivel se define un conjunto de activadores que le permiten implementar la funcionalidad requerida de la aplicación.

Descripción general de las categorías de activación

Este párrafo proporciona una descripción general de los activadores más utilizados, agrupados por categorías funcionales.

  • "disparadores de procesamiento de bloques"
  • Disparadores de "interfaz" (disparadores de eventos de interfaz)
  • activadores asociados con el uso de bloques relacionados (maestro-detalle, uno a muchos) (activadores maestro-detalle)
  • desencadenantes de manejo de mensajes
  • Desencadenantes de "navegación" (desencadenantes de transición)
  • "disparadores en tiempo de consulta"
  • "desencadenantes transaccionales"
  • "activadores de validación"

Activadores de procesamiento de bloques)

Los activadores de bloques se activan cuando ocurren eventos relacionados con la gestión de registros en bloques.

When-Create-Record ("Cuando se crea un nuevo registro")

Se activa cuando Oracle Forms intenta crear un nuevo registro en un bloque. Se puede utilizar para establecer un valor predeterminado en situaciones complejas, por ejemplo, cuando el valor predeterminado puede depender de datos ya ingresados ​​(por ejemplo, en una entrada anterior). Por supuesto, en casos simples, use la propiedad DefaultValue para los elementos.

Cuando-borrar-bloquear

Se activa cuando Oracle Forms elimina todos los registros del bloque actual

Cuando-Registro-de-base de datos

Se activa cuando Oracle Forms cambia el estado de un registro a Insertar (para un registro nuevo) o Actualizar (para un registro existente modificado). Este estado indica que este registro será procesado por la siguiente operación COMMIT_FORM (es decir, será procesado por el servidor).

Cuando-eliminar-registro

Se activa cuando se elimina una entrada. Se puede utilizar para recalcular las “sumas totales” de un bloque

Ejemplo 1 Hay un bloque de tabla T_LUDI que contiene una lista de empleados de una determinada empresa. y hay un campo de salario en él

Debajo de este bloque hay otro bloque BLOCK_ITOGI. Contiene campos: el monto del salario y las bonificaciones de todos los empleados ingresados. Para volver a calcular el monto del salario al eliminar una de las entradas, simplemente ingrese el texto:

Empezar:BLOCK_ITOGI.TOT_ZARPLATA:=:BLOCK_ITOGI.TOT_ZARPLATA-:T_LUDI.ZARPLATA; fin;

Activadores de "interfaz" (Activadores de eventos de interfaz)

"Interfaz" activa el fuego (como sugiere su nombre) cuando ocurren eventos de interfaz. Algunos de ellos (como When-Button-Pressed) se activan únicamente mediante acciones directas del usuario. Otros, como When-Window-Activated, pueden activarse como resultado de una acción directa del usuario (poner el mouse en esta pantalla) o como resultado de acciones del programa (abrir un formulario con el comando OPEN_FORM).

Estos son los principales desencadenantes de esta categoría y sus posible uso

Cuando se presiona el botón

El disparador más utilizado, se activa cuando el usuario presiona un botón

Ejemplo 2 Para calcular los montos totales de salario y bonificación usando el botón "CALCULAR"

Comience do_key("commit_form");

seleccione suma(T_LUDI.ZARPLATA) en:BLOCK_ITOGI.TOT_ZARPLATA de T_LUDI;

seleccione suma(T_LUDI.PREMIA) en:BLOCK_ITOGI.TOT_PREMIApremia de T_LUDI;

fin;

Cuando se cambia la casilla de verificación

Se activa cuando el usuario cambia el estado de la casilla de verificación

Cuando se activa la imagen

Se activa cuando el usuario hace doble clic en un elemento de imagen.

Cuando se presiona la imagen

Se activa cuando el usuario hace clic en un elemento de imagen.

Llave-

Reemplaza las acciones asociadas con estas teclas de "función". Por ejemplo, podría escribir un disparador Key-EXIT para reemplazar la salida estándar.

Cuando se cambia la radio

Se activa cuando el usuario cambia el botón actualmente "seleccionado" en un grupo de radio.

Cuando el temporizador expiró

Se activa cuando expira un temporizador de software. Utilice el activador When-Timer-Expired para actualizar los valores de algunos elementos o realizar cualquier otra tarea que deba ocurrir después de un cierto período de tiempo.

Cuando se activa la ventana

Se activa cuando el usuario o la aplicación activa la ventana. Se puede utilizar para obtener los valores iniciales de las propiedades de la ventana en un programa utilizando la función incorporada GET_WINDOW_PROPERTY, así como para establecer automáticamente el foco en un elemento específico según la situación.

Cuando-ventana-cerrada

Se activa cuando el usuario cierra la ventana usando el comando Cerrar.

Cuando la ventana está desactivada

Se activa cuando una ventana queda inactiva, por ejemplo, como resultado de la activación de otra ventana.

Activadores (activadores maestro-detalle) Oracle Forms genera activadores maestro-detalle automáticamente cuando define una relación entre bloques. Los disparadores generados proporcionan coordinación entre las entradas en el bloque principal (maestro) y en el bloque esclavo (detalle). Esto se expresa, por ejemplo, que cuando se va a un registro en el bloque principal, automáticamente aparecen registros relacionados con el seleccionado en el bloque principal en el bloque subordinado. Si no desea crear su propio sistema de comunicación especial, no necesita cambiar nada en el código generado.

Estos son los principales desencadenantes de esta categoría y sus posibles usos.

Al verificar-eliminar-maestro

Se activa cuando Oracle Forms intenta borrar en el bloque maestro

Detalles claros

Se activa cuando Oracle Forms necesita eliminar registros de un subbloque porque ya no hay un registro relacionado en el bloque principal (después de eliminarlo de allí)

Incendios en detalles poblados

Se activa cuando Oracle Forms necesita sincronizar el contenido de un bloque esclavo con el registro activo en el bloque maestro

Activadores de manejo de mensajes

Oracle Forms utiliza automáticamente los mensajes informativos o de error apropiados cuando ocurren los eventos apropiados. Los desencadenantes de esta categoría se activan en respuesta a estos eventos.

En caso de error

Se activa cuando Oracle Forms está a punto de generar un mensaje de error. Se recomienda utilizar este activador.

  • manejo de situaciones de error emergentes
  • para reemplazo mensajes estándar- con tus mensajes

Utilice las funciones integradas ERROR_CODE, ERROR_TEXT, ERROR_TYPE, DBMS_ERROR_TEXT o DBMS_ERROR_CODE para aclarar las condiciones que llevaron al "error" (excepción)

En la mayoría de los casos, un disparador en caso de error debe estar "vinculado" a un formulario, no a un bloque o elemento. Porque "detectar" ciertos errores puede ser difícil cuando Oracle Forms realiza navegación interna, como durante el proceso de confirmación.

Considerando que este disparador es muy importante, pongamos un ejemplo del Sistema HELP.

En este ejemplo se comprueba el código de error y, en el caso de determinados valores, se indican las ramas del código para procesarlos.

DECLARAR lv_errcod NÚMERO:= ERROR_CODE;

lv_errtyp VARCHAR2(3) := ERROR_TYPE;

lv_errtxt VARCHAR2(80) := ERROR_TEXT; BEGIN IF (lv_errcod = 40nnn) THEN /* ** Realizar algunas acciones de procesamiento */ ELSIF (lv_errcod = 40mmm) THEN /* ** Realizar algunas acciones de procesamiento */ ... ... ELSIF (lv_errcod = 40zzz) THEN /* **Realizar algunas acciones de procesamiento */ ELSE Message(lv_errtyp||"-"||to_char(lv_errcod)||": "||lv_errtxt); AUMENTAR Form_Trigger_Failure; ENDIF; FIN;

En mensaje Capta mensajes. Se puede utilizar para reemplazar el estándar por el suyo. para determinar este mensaje

error o uso informativo de códigos de formularios de Oracle (MESSAGE_CODE, MESSAGE_TEXT, MESSAGE_TYPE, DBMS_MESSAGE_CODE o DBMS_MESSAGE_TEXT).

En este ejemplo, cuando

código específico

mensaje, se genera un objeto de alerta, que le da al usuario la oportunidad de continuar trabajando o detenerlo para completar una determinada operación.

DECLARAR alert_button NÚMERO;

lv_errtype VARCHAR2(3) := MENSAJE_TYPE;

Estos son los principales desencadenantes de esta categoría y sus posibles usos.

lv_errcod NÚMERO:= MENSAJE_CODE;

lv_errtxt VARCHAR2(80) := MENSAJE_TEXTO; COMIENZAR SI lv_errcod = 40350 ENTONCES alert_button:= Show_Alert("continue_alert");

  • asignar un valor único a una clave de la secuencia (B caso general se recomienda hacer esto usando un activador de tabla Antes de insertar)
  • restricciones de acceso al formulario
  • inicializando variables globales

Pre-bloqueo

Se activa antes de que Oracle Forms pase del nivel de formulario al nivel de bloque. Posibles usos:

  • permitir o denegar el acceso al bloque
  • establecer el valor de las variables

Artículo previo al texto

Se activa antes de que Oracle Forms pase del nivel de registro al nivel de elemento (y también cuando se pasa de un elemento a otro dentro del mismo registro). Posibles usos:

  • establecer un valor predeterminado "complejo" basado en elementos ya ingresados ​​del mismo registro
  • escriba el valor actual de este elemento en una variable global para uso posterior

Elemento posterior al texto

Se activa antes de que Oracle Forms elimine el foco de entrada de este elemento. Puede utilizar este activador para calcular o cambiar los valores de un elemento. Además, es conveniente utilizar este activador para cambiar los atributos visuales de un elemento (como el fondo y el color del texto).

Ejemplo

Para que cuando el cursor esté en un campo, este campo esté resaltado, puede usar un par de activadores ( Cuando-Nueva-instancia-de-elemento, Publicar-elemento-de-texto) para cambiar las propiedades de los atributos visuales. En consecuencia, el primero de ellos establece VISUAL_ATRIBUTE, por ejemplo, en VISUAL_WHITE_ON_RED, y el segundo lo devuelve a su estado normal.

BEGIN SET_ITEM_PROPERTY("T_LUDI.FAMILIA",VISUAL_ATTRIBUTE,"VISUAL_USSUAL"); FIN;

Post-grabación

Se activa cuando Oracle Forms "deja" un registro. Esto sucede cuando el foco de entrada se aleja de una entrada determinada, por ejemplo, a otra entrada. Cuando se mueve a un elemento fuera de este bloque, el control pasa a los activadores a nivel de bloque. Se puede utilizar para establecer la propiedad del atributo visual para la entrada activa, tal como se describe anteriormente para un solo elemento.

Post-bloqueo

Se activa cuando Oracle Forms "abandona" el bloque y pasa al nivel del formulario. Se puede utilizar para.

  • comprobaciones de corrección (en en un sentido general) el registro actual en el bloque (el que tenía el foco de entrada cuando ocurrió este evento)
  • comprobando determinadas condiciones e impidiendo que el usuario salga de este bloque. (Ejecutar como ejemplo)

Post-formulario

Se activa antes de que Oracle Forms pase a otro formulario.

Cuando se activa una nueva instancia

When-New-Instance desencadena el disparo después de una secuencia de transiciones a través de la jerarquía de objetos de Oracle Forms, cuyo resultado es mover el foco de entrada a un elemento determinado. En realidad, este activador se ejecuta cuando el foco ya está establecido y el formulario está listo para la entrada del usuario. A diferencia de los activadores previos y posteriores, los activadores When-New-Instance no se activan en eventos de navegación internos.

Estos son los principales desencadenantes de esta categoría y sus posibles usos.

Cuando-nueva-instancia-de-formulario

Se ejecuta cuando se inicia el formulario, después de que se hayan completado todas las transiciones de navegación. Se puede utilizar para cargar datos en un formulario y también para establecer variables globales.

Ejemplo

El autor ha utilizado este ejemplo del sistema HELP muchas veces. En él se rellena el formulario con datos de las tablas correspondientes. Al crear automáticamente un formulario usando Forms Designer, este activador no se crea, pero puede seleccionar un panel de botones durante la creación, uno de los cuales, "Consulta", hace lo mismo, pero debido a las características específicas de la implementación, tiene para hacer clic dos veces.

COMENZAR Configuración_Mis_Variables_Globales;

--ir al bloque principal (en relación con la parte maestra) Go_Block("Glavnii_Block");

/* ** Suprimir mensajes estándar "de trabajo" */ :System.Suppress_Working:= "TRUE";

--ejecutar directamente la solicitud Execute_Query;

:System.Suppress_Working:= "FALSO"; FIN; Cuando-nueva-instancia-de-bloque Se activa inmediatamente después de que el foco de entrada se mueve de un elemento en un bloque a un elemento en otro. Esto sucede cuando Oracle Forms está listo para aceptar la entrada del usuario, es decir, después de la "secuencia de eventos de navegación".

Cuando-nueva-instancia-de-registro

Se ejecuta después de que el foco ha pasado de un elemento en un registro a un elemento en otro registro. Esto ocurre cuando Oracle Forms está listo para aceptar la entrada del usuario, es decir, después de la "secuencia de eventos de navegación".

nueva entrada

Los activadores en tiempo de consulta se activan inmediatamente ANTES o DESPUÉS de que un operador o aplicación active una consulta en un bloque.

Uso típico de activadores de solicitudes:

  • Consulta previa- Procesa las condiciones de la consulta o agrega condiciones adicionales inmediatamente antes de enviar la palabra de control SELECT a la base de datos.
  • Post-consulta- Se ejecuta después de recibir una muestra, por ejemplo, para buscar valores en otras tablas en función de la información recibida en la muestra. Se ejecuta una vez para cada registro de la selección.

Desencadenantes transaccionales

Los desencadenadores transaccionales se activan por una amplia gama de eventos que ocurren durante la interacción de formularios y tablas de bases de datos.

Los principales desencadenantes en esta categoría:

  • Al eliminar- Reemplaza el proceso estándar para administrar registros eliminados en Oracle Forms.
  • En inserción- Reemplaza el proceso estándar para administrar registros insertados en Oracle Forms.
  • Bloqueado- Reemplazo del bloqueo de registros estándar en las tablas de la base de datos.
  • Al iniciar sesión- Reemplazo de operaciones estándar de Oracle Forms para conectarse a ORACLE. Se utiliza principalmente para el procesamiento de eventos cuando el formulario no necesita obtener una conexión con ORACLE, por ejemplo, al interactuar con tablas distintas de ORACLE.
  • Al cerrar sesión- Reemplazo del proceso estándar de Oracle Forms cuando se desconecta de ORACLE.
  • Actualización- Reemplazo del proceso estándar de Oracle Forms, responsable de la actualización de registros en tablas.
  • Compromiso posterior a la base de datos- Agregar funciones adicionales a Oracle Forms al completar una operación de base de datos.
  • Post-eliminación- Verificación de transacciones al eliminar un registro de la base de datos.
  • Compromiso posterior a los formularios- Agregar adicionales Funciona en el procedimiento estándar para completar el intercambio en el formulario antes del final de la transacción.
  • Post-inserción- Verificación de transacciones al insertar un registro en la base de datos.
  • Actualización posterior- Transacciones de verificación al actualizar un registro de base de datos.
  • Compromiso previo- Realiza operaciones urgentes antes de que se completen las transacciones de publicación y confirmación.
  • Preeliminar- Administrar un registro antes de eliminarlo de la base de datos mediante transacciones estándar de publicación y confirmación; por ejemplo, para evitar que se eliminen registros que cumplen determinadas condiciones.
  • Pre-inserción- Administre un registro antes de insertarlo en la base de datos mediante transacciones estándar de publicación y confirmación.
  • Actualización previa- Administre el registro antes de que se realicen cambios en el registro mediante transacciones estándar de publicación y confirmación.



Arriba