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

disparador y procedimiento en mysql 5.5

Estas en el tema de disparador y procedimiento en mysql 5.5 en el foro de Mysql en Foros del Web. Hola!!!! xicos estoy haciendo una aplicación que utiliza mysql 5.5.. Lo que trato es de tener una tabla donde se registran unos movimientos de cuenta ...
  #1 (permalink)  
Antiguo 07/09/2012, 08:20
 
Fecha de Ingreso: septiembre-2012
Mensajes: 1
Antigüedad: 11 años, 7 meses
Puntos: 0
Exclamación disparador y procedimiento en mysql 5.5

Hola!!!!
xicos estoy haciendo una aplicación que utiliza mysql 5.5.. Lo que trato es de tener una tabla donde se registran unos movimientos de cuenta bancaria (auxiliar_cuentas) y cada vez que se inserta una tupla en la misma, que salte un disparador, el cual llama a un procedimiento donde se calcula el estado de las cuentas. A la hora de crear ambas en mysql, me saltan errores. Estoy un poco perdida, no se donde está el error ni cómo solucionarlo. Os dejo el disparador y el procedimiento a ver si algún alma caritativa me puede exar una mano:

create trigger disparador_cuentas after insert or update or delete on auxiliar_cuentas for each row
tipo auxiliar_cuentas.concepto%TYPE;
cantidad auxiliar_cuentas.cantidad%TYPE;
dia auxiliar_cuentas.dia_modif%TYPE;
hora auxiliar_cuentas.hora_modif%TYPE;
BEGIN
select concepto into tipo from auxiliar_cuentaswhere id=(select max(id) from auxiliar_cuentas);
select cantidad into cantidad from auxiliar_cuentaswhere id=(select max(id) from auxiliar_cuentas);
select dia_modif into dia from auxiliar_cuentaswhere id=(select max(id) from auxiliar_cuentas);
select hora_modif into hora from auxiliar_cuentaswhere id=(select max(id) from auxiliar_cuentas);
calcular_estado_cuentas(tipo,cantidad,dia,hora);
END disparador_cuentas;


create procedure calcular_estado_cuentas(tipo in varchar, cantidad in int, dia in date, hora in time) as
signo cuentas_ampa.signo%TYPE;
saldo cuentas_ampa.saldo%TYPE;
BEGIN
select signo into signo from cuentas_ampa where identificador=(select max (identificador) from cuentas_ampa);
select saldo into saldo from cuentas_ampa where identificador=(select max (identificador) from cuentas_ampa);

if (signo=’-‘) then
if (tipo=’gasto’) then
saldo := saldo + cantidad;
signo := ‘-‘;
else ------------------------------------------------------------> tipo=’ingreso’
if (cantidad>saldo) then
saldo := cantidad - saldo;
signo := ‘+‘;
else
saldo := saldo - cantidad;
signo := ‘-‘;
end if;
end if;
else ----------------------------------------------------------------------------> signo=’+’
if (tipo=’ingreso’) then
saldo := saldo + cantidad;
signo := ‘+‘;
else ------------------------------------------------------------> tipo=’gasto’
if (cantidad>saldo) then
saldo := cantidad - saldo;
signo := ‘-‘;
else
saldo := saldo - cantidad;
signo := ‘+‘;
end if;
end if;
end if;

insert into cuentas_ampa [signo,saldo,dia,hora] values (signo,saldo,dia,hora);
END calcular_estado_cuentas;
  #2 (permalink)  
Antiguo 07/09/2012, 08:49
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: disparador y procedimiento en mysql 5.5

Hasta lo que yo recuerdo, una de las limitaciones de los TRIGGER en MySQL es que no pueden invocar ni funciones ni procedimientos almacenados..
Era una restricción para evitar que se intentara hacer con los SP cosas que impactaran en la tabla.

Por lo demás, esa sintaxis es de Oracle... no de MySQL. No te olvides que no existe un estandar de PL/SQL, por lo que la sintaxis de un DBMS no es aplicable a otro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/09/2012 a las 09:05

Etiquetas: disparador, procedimiento, select, tabla, tipo
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:56.