Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/05/2009, 16:34
jorgelo82
 
Fecha de Ingreso: abril-2009
Mensajes: 78
Antigüedad: 15 años
Puntos: 0
Ayuda Urgente con Procedimiento Almacenado

Que tal compañeros necesito su ayuda urgente tengo una aplicacion web para entregar el dia de mañana para la cual necesito el siguiente procedimiento almacenado:

DELIMITER $$

DROP PROCEDURE IF EXISTS `viaticosver2`.`procedsuma` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `procedsuma`(in identificador INTEGER)
begin
set @hosp_tot=(SELECT SUM(Cantidad) FROM conceptos WHERE Concepto LIKE 'Hospedaje' AND Folio=identificador);
set @iva_h=(SELECT SUM(Iva_cant) FROM conceptos WHERE Concepto LIKE 'Hospedaje' AND Folio=identificador);
set @tran_tot=(SELECT SUM(Cantidad) FROM conceptos WHERE Concepto LIKE 'Transporte' AND Folio=identificador);
set @iva_t=(SELECT SUM(Iva_cant) FROM conceptos WHERE Concepto LIKE 'Transporte' AND Folio=identificador);
set @com_tot=(SELECT SUM(Cantidad) FROM conceptos WHERE Concepto LIKE 'Comidas' AND Folio=identificador);
set @iva_c=(SELECT SUM(Iva_cant) FROM conceptos WHERE Concepto LIKE 'Comidas' AND Folio=identificador);
set @av_tot=(SELECT SUM(Cantidad) FROM conceptos WHERE Concepto LIKE 'Avion' AND Folio=identificador);
set @iva_a=(SELECT SUM(Iva_cant) FROM conceptos WHERE Concepto LIKE 'Avion' AND Folio=identificador);
set @lav_tot=(SELECT SUM(Cantidad) FROM conceptos WHERE Concepto LIKE 'Lavanderia' AND Folio=identificador);
set @iva_l=(SELECT SUM(Iva_cant) FROM conceptos WHERE Concepto LIKE 'Lavanderia' AND Folio=identificador);
set @otr_tot=(SELECT SUM(Cantidad) FROM conceptos WHERE Concepto LIKE 'Otros' AND Folio=identificador);
set @iva_o=(SELECT SUM(Iva_cant) FROM conceptos WHERE Concepto LIKE 'Otros' AND Folio=identificador);
set @noded_tot=(SELECT SUM(Cantidad) FROM conceptos WHERE Concepto LIKE 'No deducibles' AND Folio=identificador);
set @iva_n=(SELECT SUM(Iva_cant) FROM conceptos WHERE Concepto LIKE 'No deducibles' AND Folio=identificador);
update justif_gastos set Hospedaje_tot=@hosp_tot, Iva_hosp=@iva_h, Transporte_tot=@tran_tot, Iva_trans=@iva_t,
Comidas_tot=@com_tot, Iva_com=@iva_c, Avion_tot=@av_tot, Iva_avion=@iva_a, Lavanderia_tot=@lav_tot, Iva_lavan=@iva_l,
Otros_tot=@otr_tot, Iva_otros=@iva_o, No_deducibles=@noded_tot, Iva_noded=@iva_n
where Folio=identificador;
set @tot=(SELECT Hospedaje_tot + Iva_hosp + Transporte_tot + Iva_trans + Comidas_tot + Iva_com + Avion_tot + Iva_avion +
Lavanderia_tot + Iva_lavan + Otros_tot + Iva_otros +No_deducibles + Iva_noded FROM justif_gastos WHERE Folio=identificador);
update justif_gastos set Total=@tot
where Folio=identificador;
end $$

DELIMITER ;

Pero tengo el siguiente problema, lo que esto hace es seleccionar los conceptos y el iva para hacer una suma y luego esta insertarla en un campo, pero el problema que tengo es que no siempre van a estar todos los conceptos, ya que estos los da el usuario, a veces se tienen varios conceptos llamados Avion con el mismo Folio y los suma todos, para que algunos no se confundan tienen un número de ID como llave primaria para tener varios conceptos con el mismo folio, pues bien el procedimiento lo realiza muy bien pero solo lo hace cuando encuentra todos los conceptos, por ejemplo si no encuentra Transporte porque el usuario no metió ese registro entonces el procedimiento no se hace pero yo necesito que lo haga aunque no estén todos, pensé en hacer esto con un if pero no se si se puedan meter consultas además de que no se manejar muy bien el mysql, si alguien me puede ayudar a hacer esto o me enseña una mejor forma se lo agradecería mucho ya que me pasó en las pruebas finales de mi aplicación y ahora ya me está comiendo el tiempo
Gracias Gracias Gracias