Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Procedimientos almacenados y Triggers

Estas en el tema de Procedimientos almacenados y Triggers en el foro de Mysql en Foros del Web. Hola buen día, Tengo mucho tiempo buscando y averiguando como hacer correctamente una función(trigger/procedure) almcenada en mysql. Enlistaré mis problemas: 1. No entiendo la diferencia ...
  #1 (permalink)  
Antiguo 14/08/2011, 15:52
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 9 meses
Puntos: 32
Pregunta Procedimientos almacenados y Triggers

Hola buen día,

Tengo mucho tiempo buscando y averiguando como hacer correctamente una función(trigger/procedure) almcenada en mysql.

Enlistaré mis problemas:

1. No entiendo la diferencia entre Trigger y Procedure.
2. No sé cual de las dos es mejor.
3. He probado con diferentes tutoriales, usando el mísmo código de los ejercicios,
y no me funcionan (error de sintáxis).

Prácticamente por el tercer problema no he podido entenderlo, por más que pruebo con diferentes tutoriales ninguno de los ejercicios me funcionan en MySQL con motor InnoDB.

Si alguien pudiera darme algunos ejemplos sencillos de las diferencias entre trigger y procedure, y también de como es su sintáxis con ejemplo prácticos como la creación de una tabla, inserción de datos, actualización, operaciones matemáticas, etc. Cualquier función sencilla con explicación.

Espero que alguien pueda ayudarme y muchas gracias.
  #2 (permalink)  
Antiguo 14/08/2011, 16:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Procedimientos almacenados y Triggers

Hay una diferencia muy básica entre triggers y stored procedures: Los triggers son procedimientos qeue se ejecutan automáticamente, cuando se produce un evento sobre el que se quiere trabajar. Existen tres tipos de eventos que pueden disparar un trigger: INSERT, DELETE y UPDATE.
El trigger se programa para realizar una tarea determinada que se deba hacer siempre que se produzca el evento. No requiere intervención humana o programática y no se puede detener.
Tiene algunas características:
1) No recibe parámetros de entrada o salida.
2) Los únicos valores de entrada son los correspondientes a los de las columnas que se insertan, y sólo son accesibles por medio de ciertas pseudovariables (NEW y OLD).
3) No se puede ejecutar una operación INSERT/UPDATE/DELETE sobre la misma tabla donde el TRIGGER se está ejecutando.
4) No se puede ejecutar una tarea sobre otra tabla, si la segunda tiene un trigger que afecte a la tabla del primer trigger en ejecución (circularidad).
5) No se puede invocar procedures desde un TRIGGER.
6) No se puede invocar un SELECT que devuelva una tabla resultado en el TRIGGER.
7) Otros.

Un stored procedure es un procedimiento almacenado que debe ser invocado para ejecutarse.
1) Puede recibir parámetros y devolver parámetros.
2) Puede manejar cualquier tabla, realizar operaciones con ellas y realizar iteraciones de lectura/escritura.
3) Puede devolver una tabla como resultado.
también valores dentro de los parámetros del prototipo si los mismos son también de salida.
4) Existen en la base donde se crean, pero no dependen de ninguna tabla.
5) Pueden aceptar recursividad (pero no es recomendable).
6) otras características.

O sea: No son la misma cosa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/08/2011, 21:55
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 9 meses
Puntos: 32
Respuesta: Procedimientos almacenados y Triggers

Hola gnzsoloyo, gracias ahora sé mas acerca de la diferencia entre estos términos, pero lo que más necesito es unos ejemplos muy simples(para novato) que funcionen realmente ya que los que he encontrado no funcionan.

Bueno pero mientras...
Para retroalimentación:
Un trigger es una acción automatica de evento, por lo que, logicamente, no resive parámetros y generalmente sirve para dar mantenimiento a la base de datos ¿?.
Un stored procedure es una función personalizable y reutilizable como en cualquier lenguaje de programación, parecidas(en su uso) a las funciones nativas de MySQL ¿?.

Bueno si todo va bien, porfavor y agradecería mucho, ¿Cómo es la sintáxis correcta de los triggers y procedures?
Como mencioné al principio, con ejemplos, gracias.
  #4 (permalink)  
Antiguo 15/08/2011, 05:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Procedimientos almacenados y Triggers

Cita:
Un trigger es una acción automatica de evento, por lo que, logicamente, no resive parámetros y generalmente sirve para dar mantenimiento a la base de datos ¿?.
No necesariamente.
Los triggers se usan para automatizar alguna tarea que deba hacerse siempre, de la misma forma y que no necesite ser supervisada o activada de otro modo. No hay una regla que nos diga que se usan para una cosa u otra. Eso depende exclusivamente de las necesidades del sistema que esa base de datos alimenta.
Hay gente que las usa para crear logs de auditoría, otros lo usan para no tener que programar actualizaciones de ciertos datos, yo los he usado a veces para numerar los subitems de una factura, o para insertar ciertos datos cuando el INSERT o UPDATE tomen ciertos valores en un campo dado.
Como te digo, no hay una regla fija; son una herramienta que se usa cuando se necesita.
Cita:
Un stored procedure es una función personalizable y reutilizable como en cualquier lenguaje de programación, parecidas(en su uso) a las funciones nativas de MySQL ¿?.
No.
Un stored procedure es una rutina escrita en SQL, con el agregado de poder usar algunas clausulas sólo para SP. El objetivo de un SP es hacer tareas complejas con secuencias de consultas. No se parece en ese sentido a una funcion nativa de MySQL.
Lo que sí existe es la posibilidad de hacer STORED FUNCTIONS, que siguen estando programadas en SQL, pero devuelven un único valor.
Estas son una subclase de los stored procedures, pero como los SP, sólo existen en la base de datos donde se crean. No son parte de las funciones de MySQL.
Alguna gente usa los SP para aumentar la seguridad contra el sql-injection, ya que son invulnerables al mismo. Otros los usan para restringir el acceso de los usuarios, ya que se peude hacer que un usuario sólo pueda ejecutar SP y no leer tablas, con lo que aumentas la seguridad de la base indirectamente.
Yo lo uso para estas dos cosas y otras más, como por ejemplo tareas de multiples consultas que generan reportes completos (la salida final es una tabla), especialmente cuando tengo que trabajar con tablas de tipo TEMPORARY. En este sentido, mis SP suelen tener más de 150 líneas y me resultan más eficientes que hacerlos sentencia por sentencia, usando programación.

¿Se ve un poco mejor el tema?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 15/08/2011, 09:24
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 9 meses
Puntos: 32
Respuesta: Procedimientos almacenados y Triggers

Hola gnzsoloyo, gracias! ahora si ya tengo un mejor entendimiento, pero...
¿Podrías mostrarme ejemplos reales de cómo se usan?
Saludos y muchas gracias.
  #6 (permalink)  
Antiguo 16/08/2011, 16:38
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 9 meses
Puntos: 32
Respuesta: Procedimientos almacenados y Triggers

Tema perdido ???

Etiquetas: procedimientos, procedure, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:14.