Bandera de nuevo registro

Hola! Veo que tienes muchísima experiencia en bases de datos, así que creo que me puedes ayudar con esto. Resulta que necesito saber si en Access, MySQL, SQL server, ORACLE, o POR base de datos, existe al posibilidad de que cuando se agreguen nuevos registros a una tabla yo pueda saber cuales son (por medio de alguna bandera que pueda leer). Esto me permitiría evitar un proceso repetitivo de consultas a la tabla cada minuto para ver si hay registros nuevos, guiándome por un campo fecha. Me gustaría que cuando existan registros nuevos, se dispare una bandera que me indique que debo leer la tabla. Please, si sabes como hacer esto te agradezco de antemano tu ayuda!

5 respuestas

Respuesta
1
En Oracle y SqlServer puedes implementar 'triggers' que son disparadores de eventos antes o después de una acción sobre una tabla. Para MySql estos 'triggers' están en desarrollo, que yo sepa Access no lo tiene. Visual FoxPro tiene la manera de configurar reglas para el evento Insert.
Hola! Se trata de una tabla de alarmas de unos equipos que debo consultar para notificar las alarmas nuevas por medio de un mensaje corto (SMS) al celular de la persona de guardia. Entonces, el sistema lo diseñé pero hace consultas cada 1 minuto (esto es configurable) sobre la tabla y a partir del campo FechaDelEvento determino si ya la envié o no. Esto es ineficiente, pues recargo al procesador de consultas sucesivas innecesarias. Lo que necesito saber es si existe la posibilidad de que la tabla de alarmas dispare algún evento que me indique que existen registros nuevos para solo en ese momento proceder a realizar la consulta. Espero tu respuesta y muchas gracias!
En la cabecera de cada registro de las Tablas XBase se guarda la cantidad de registros, también se guarda una fecha pero es de la ultima modificación. Los otras bases de datos requieren una consulta para saber cuantos registros tiene cada tabla.
Tal vez si me cuentas para que deseas consultar los registros nuevos en las tablas, pueda guiarte en una solución.
Respuesta
1
A ver, puedes hacer varias cosas para solventar o mejorar tu problema. Por un lado, puedes seguir con el método de la consulta periódica, pero en vez de buscar comparando el campo con la fecha de inserción, puedes comprobar solo el recuento de registros, y solo en el caso de que haya cambiado hacer la consulta para saber cuales son. Esto ahorraría bastante tiempo de proceso en tu BBDD pero el método de consulta seria el mismo: comprobarlo periódicamente para encontrarlos.
Otra solución, más limpia, es el uso de triggers o disparadores. Un trigger es una función que se dispara cuando se produce un cierto evento, como un insert en una tabla. Solo tienes que programas un método en el lenguaje de tu BBDD para que cada vez que se produzca una inserción se ejecute. Así tu no tendrás que hacer ninguna comprobación, solo esperar a que alguien haga el insert y el método se ejecute automáticamente.
Busca en la ayuda de tu SGBD la palabra trigger o disparador y tendrás toda la documentación que necesites.
Hasta pronto!
Jordi
Respuesta
1
Por lo que entiendo de tu pregunta lo que puedes hacer es crear un campo (varchar, lógico, integer...) y que el programa o proceso que inserta los registros le ponga un valor a ese campo(p.e. El 1), lo que tendrías que hacer es en tu proceso de consulta que sólo te muestre los que tiene valor 1, realizas el proceso que tengas que realizar y luego le cambias el valor a 0 a ese campo.
Es la forma más sencilla que encuentro para señalar registros nuevos.
Si lo que quieres es saber si se agregaron nuevos registros (independientemente de saber cuales son) lo único que tienes que hacer es usar una variable que te de el total de registros en la bd y que tu proceso obtenga el total y lo compare contra lo que tienes, si existe uno nuevo entonces realizas los cálculos o procesos que necesitas y al final actualizas en contador.
En fin, espero que te sean de ayuda y si no era por ahí te agradecerías me ampliaras tu pregunta.
Hola! No me di a entender bien. La tabla que debo consultar no es propietaria, por lo que no la puedo modificar en su estructura. Lo que necesito es que se dispare un evento cuando ocurra la inserción de un nuevo registro, de manera de ejecutar un proceso justo en ese momento y no tener que estar monitoreando por medio de un infinito ciclo de consultas si tengo o no nuevos registros. Necesito que esa tabla "me avise" cuando ha sido modificada ya sea por la inserción o eliminación de algún registro. Me dijeron que esto era posible (unos triggers) pero no se como se implementaría en Oracle.
Disculpa la tardanza... estuve fuera...
En fin, en ese sentido tienes razón los triggers te pueden ayudar ya que existen para diferentes eventos... on insert... on update... y se manejan similar al SP. Te hablo de acuerdo a SQL, en Oracle no sé cómo funciona ya que no lo he usado.
Nuevamente pido disculpas por el retraso y quedo a tus órdenes para cualquier duda o aclaración al respecto.
Luis Daniel.
Respuesta
1
Lo que pides seria exactamente la definición de un desencadenador o trigger de inserción. Por lo que se, access y mysql no permiten estos desencadenadores, sql server si que los permite y oracle no lo se, pues nunca he trabajado con ella, aunque ya diría que seguramente que si.
Estos desencadenadores vendrían a ser funciones asociadas a una tabla que se ejecutan al producirse un determinado evento, como podría ser una inserción, un borrado o una actualización. Ademas también se puede especificar el momento en que se ejecutara ese código dentro del evento, ya sea antes, durante o después de la inserción, borrado o actualización.
Muchas Gracias, me has dado una gran guía, ahora que se que es posible voy a investigar como hacerlo. Si sabes como se hace ne SQL server te agradecería que me explicaras con un poquito más de detalle (si puedes) escribiéndome a [email protected].
La verdad es que me sacaste de un apuro... GRACIAS!
Respuesta
1
¿Aun te inresa o ya es demasiado tarde?
Perdón por el retardo he estado de viaje.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas