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

Problema Con Un Procedimiento llamado desde un Trigger

Estas en el tema de Problema Con Un Procedimiento llamado desde un Trigger en el foro de Mysql en Foros del Web. Hola a todos, He estado intentando hacer un ejercicio el cual me pide calcular la comision a un vendedor por la venta de un producto ...
  #1 (permalink)  
Antiguo 12/06/2011, 14:31
Avatar de IngAndresMartinez  
Fecha de Ingreso: junio-2011
Ubicación: Piedecuesta-Santader-Piedecuesta
Mensajes: 7
Antigüedad: 12 años, 11 meses
Puntos: 1
Problema Con Un Procedimiento llamado desde un Trigger

Hola a todos, He estado intentando hacer un ejercicio el cual me pide calcular
la comision a un vendedor por la venta de un producto determinado , He creado el procedimiento y he creado el trigger y me lo deja ejecutar, Sin embargo cuando voy a a realizar un Insert en ventas con el Mismo numero de Vendedor me aparece este aviso
Cita:
Script line: 12 Result consisted of more than one row


Tengo las siguientes Entidades:


Drop table if exists Ventas;
Create table Ventas (
Numero_Venta Integer(10) Primary key not null,
Importe Integer(10) Not null,
Cedula_Vendedor Integer(10)Not null,
Codigo_Producto Varchar(15) Not Null,
Tipo_Producto Varchar(10) Not null
);


Drop table if exists Comisiones;
Create table Comisiones (
Comision_Vendedor Integer(10) Not null,
Cedula_Vendedor Integer(10) Not null
);



Este es el Procedimiento:


Delimiter //
Drop procedure if exists Comisiones;//
Create procedure Comisiones (In Vendedor Integer(10))
Begin
Declare Existe Bool;
Declare Comision Integer(10);
Declare TipoProducto Varchar(15);
Declare Suma Integer(10);

Select Tipo_Producto into TipoProducto from Ventas where Vendedor=Cedula_Vendedor;


If TipoProducto = 'Importado' then
Select sum(Importe) into Suma from ventas WHERE Vendedor = Cedula_Vendedor;
SET Comision =Suma + (Suma * 0.15);
ElseIF
TipoProducto like 'Nacional' then
Select sum(Importe) into Suma from ventas WHERE Vendedor = Cedula_Vendedor;
SET Comision = Suma + (Suma * 0.20);
end if;


Select count(1)>0 into Existe from Comisiones where Vendedor = Cedula_Vendedor;
if existe then
UPDATE Comisiones set Comision_Vendedor = (Comision_Vendedor +Comision) where Vendedor = Cedula_Vendedor;
else
insert into Comisiones values (Comision,Vendedor);
end if;
End;

Select count(1)>0 into Existe from Comisiones where Vendedor = Cedula_Vendedor;
if existe then
UPDATE Comisiones set Comision_Vendedor = Comision where Vendedor = Cedula_Vendedor;
else
insert into Comisiones values (Comision,Vendedor);
end if;
End;


Y aqui esta el Trigger


Delimiter //
Drop trigger if exists Ejemplo6;//
Create trigger Ejemplo6
After Insert on Ventas
For each row
Begin
Call Comisiones(New.Cedula_Vendedor);
End;//
Delimiter


Y estos son los datos que intento Ingresar:

Insert into Ventas values (1,10000,90029192,'Pr001','Importado');
Insert into Ventas values (2,10000,90029192,'Pr002','Nacional');
Insert into Ventas values (3,50000,37918205,'Pr003','Nacional');

Espero alguien me pueda ayudar con este problemita, Gracias !!!!...........
  #2 (permalink)  
Antiguo 12/06/2011, 15: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, 5 meses
Puntos: 2658
Respuesta: Problema Con Un Procedimiento llamado desde un Trigger

Tienes un par de problemas:
1) No se permite en MySQL invocar procedimientos almacenados desde un TRIGGER. El tema se ha tratado varias veces, por lo que el debate lo puedes encontrar con el buscador del foro.
2) Si realizas un SELECT para conseguir un único dato, tienes que asegurarte de que el SELECT efectivamente devuelva un único dato. Al menos uno de los que usas te está devolviendo más de uno. Verifica cuál.
__________________
¿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 13/06/2011, 10:25
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Respuesta: Problema Con Un Procedimiento llamado desde un Trigger

Hola IngAndresMartinez,

La verdad no entiendo bien la lógica del procedimiento almacenado (stored procedure), sin embargo, el problema lo tienes en la siguiente línea del procedimiento almacenado:

Código SQL:
Ver original
  1. SELECT Tipo_Producto INTO TipoProducto FROM Ventas WHERE Vendedor=Cedula_Vendedor;

Si te fijas en los INSERT:

Código SQL:
Ver original
  1. INSERT INTO Ventas VALUES (1,10000,90029192,'Pr001','Importado');
  2. INSERT INTO Ventas VALUES (2,10000,90029192,'Pr002','Nacional');

El vendedor con "Cedula_Vendedor = 90029192" tiene dos (2) "Tipo_Producto": "Pr001" y "Pr002". En la variable "TipoProducto" solo puedes almacenar un (1) valor, pero el SELECT te retornará dos (2) filas por ello el error:

Cita:
Error Code : 1172 Result consisted of more than one row
En este caso es posible ejecutar el procedimiento almacenado desde el disparador (trigger) sin problema.

Última edición por wchiquito; 13/06/2011 a las 13:18

Etiquetas: llamado, procedimiento, 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 03:56.