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

trigger en mysql

Estas en el tema de trigger en mysql en el foro de Mysql en Foros del Web. Hola !! Bueno lo q pas es ke tengo el sgt trigger pero me marca error y ps no se q estoy haciendo mal ....Gracias ...
  #1 (permalink)  
Antiguo 22/05/2011, 20:20
 
Fecha de Ingreso: mayo-2011
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
trigger en mysql

Hola !!
Bueno lo q pas es ke tengo el sgt trigger pero me marca error y ps no se q estoy haciendo mal ....Gracias x la ayuda :D

create database ejemplo1;
use ejemplo1;

create table ciudadano(
codigo int,
nombre nvarchar(50),
longitud_del_nombre nvarchar(2)
)engine=innodb;

create trigger triggeractualizacionciudadano
on ciudadano for insert
as
declare @codigin1 as int
declare @nombrecin1 as nvarchar(50)
declare @longitudin1 as int
begin
select @codigin1 = (select codigo from inserted)
select @nombrecin1 = (select nombre from inserted)
select @longitudin1 = (select len(@nombrecin1))
rollback transaction
if @longitudin1< 50
insert into ciudadano values(@codigin1,@nombrecin1,@longitudin1)
end;
  #2 (permalink)  
Antiguo 22/05/2011, 20:22
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: trigger en mysql

Estás usando un código que no es de MySQL. Eso es SQL Server.
Los PL/SQL no son portables entre DBMS porque no existe un estandar. Cada empresa ha creado su propia versión y no tienen elementos comunes.

¿Qué estás utilizando en realidad? ¿MySQL o SQL Server?
__________________
¿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 22/05/2011, 20:27
 
Fecha de Ingreso: mayo-2011
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: trigger en mysql

Bueno yo necesito hacer ese codigo d SQL pero en mysql la vdd no se como se hac en mysql un trigger parecido al d arriba gracias
  #4 (permalink)  
Antiguo 22/05/2011, 20:53
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: trigger en mysql

No se entiende muy bien lo que dices. Trata de no escribir en SMS, aquí tienes tiempo y espacio para hacerlo bien, y mientras mejor escribas, más fácil es entender tu problema.


Te recalco lo que dije antes: No existe un lenguaje PL/SQL estandar. No se ha definido nada y cada DBMS implementa el que quiere, poniéndole o sacándole cosas como se les ocurre. A eso tienes que sumarle que también le meten cosas que son extensiones que al ANSI-SQL ya le han puesto a las consultas, lo que lleva a que el panorama se vuelva peor.
Consejo: Cuando empieces a usar un DBMS busca el manual de referencia en linea. Todo lo que necesitas saber está allí. En el caso de MySQL hay dos capítulos: Stored Procedures y Triggers, que tienen lo suficiente como para empezar.

Lo principal es:
- Las variables locales de un trigger no llevan "@". Sólo cierto tipo especial de variables usan ese prefijo.
- Los triggers (y los SP) deben cargarse como un sólo objeto. Cuando tienen más de una línea eso se hace cambiándole momentáneamente al MySQL el delimitador de sentencias por defecto (el ";") con la cláusula DELIMITER. Esto sólo se hace cuando usas la consola o lo cargas desde un script. No se hace cuando lo cargas con un lenguaje (PHP, ASP, o lo que sea).
- Los trigger sólo tienen datos de entrada, no poseen datos de salida, no son opcionales, no pueden interrumpirse ni evitarse condicionalmente.
- Como no devuelven datos, no sirven para determinar estados de error o confirmación de ningún tipo.
- Solamente se usan cuando hay una tarea que siempre se debe realizar ante un evento INSERT/UPDATE/DELETE sobre una tabla.
- No se admiten anidamientos ni recursividades. No pueden realizar una tarea de INSERT/UPDATE/DELETE sobre la misma tabla donde se definen, ni tampoco sobre una tabla que tenga definida una acción contra la propia del TRIGGER (recursividad).
- Para acceder a los datos que están entrando o los que ya existían en el registro afectado por el evento INSERT/UPDATE/DELETE se usan pseudovariables NEW y OLD que sólo existen dentro del TRIGGER.

Hay algunos otros considerandos, pero por el momento es suficiente.

Tu trigger no puede definirse en MySQL porque se trata de un trigger de ejecución condicional, que en MySQL no existen. Lo que tu quieres hacer se debe realizar en un stored procedure.

Como tip adicional te diría que si lo que quieres es validar la longitud del nombre ingresado por el usuario, eso no se hace en la base de datos (es un desperdicio de tiempo, conexión y capacidades), sino que se hace en la aplicación, poniéndole las validaciones en el formulario de ingreso de datos.
Plantear que las validaciones las haga la base es un vicio de los programadores, que no quieren tener que hacer esa parte (las validaciones) porque les resultan engorrosas. ¡Por supuesto que lo son! Pero eso no quiere decir que no sea muchísimo más eficiente hacerlo en la capa de negocios que en la base, a donde deberían llegar los datos ya depurados...
__________________
¿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 22/05/2011, 21:01
 
Fecha de Ingreso: mayo-2011
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: trigger en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No se entiende muy bien lo que dices. Trata de no escribir en SMS, aquí tienes tiempo y espacio para hacerlo bien, y mientras mejor escribas, más fácil es entender tu problema.

.................................................. .................................................. .................................................. .................................................. .............................
.............Como tip adicional te diría que si lo que quieres es validar la longitud del nombre ingresado por el usuario, eso no se hace en la base de datos (es un desperdicio de tiempo, conexión y capacidades), sino que se hace en la aplicación, poniéndole las validaciones en el formulario de ingreso de datos.
Plantear que las validaciones las haga la base es un vicio de los programadores, que no quieren tener que hacer esa parte (las validaciones) porque les resultan engorrosas. ¡Por supuesto que lo son! Pero eso no quiere decir que no sea muchísimo más eficiente hacerlo en la capa de negocios que en la base, a donde deberían llegar los datos ya depurados...
Oye me disculpo por no escribir raro, con lo que me respondiste creo aclare mi duda muchas gracias ..Saludos!!

Etiquetas: 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 05:55.