Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/04/2012, 14:18
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Problema con Procedimiento Almacenado

Hay varias razones:
1) Mal uso de los DELIMITER.
2) Error de sintaxis en el IF ... THEN... ELSE ... END IF;
3) Incorrecto uso de las variables locales (el "@" se usa para las de sesión usuario, no para las locales).
4) Incorrecta definición de tipos de datos (No existe el INT(255), ese numero es imposible en ese contexto).

Probemos:
Código MySQL:
Ver original
  1. USE fgaintegrado;
  2. DROP PROCEDURE IF EXISTS TotalSiniestralidad;
  3. DELIMITER $$
  4.     CREATE PROCEDURE TotalSiniestralidad(IN nit_inter VARCHAR (25), IN convenio INT, IN movilizado INT, IN ingreso INT, IN porc_siniestralidad  DOUBLE)
  5.     BEGIN
  6.         DECLARE b_siniestralidad VARCHAR(1);
  7.         DECLARE total_siniestralidad INT;
  8.  
  9.         SELECT base_siniestralidad
  10.         INTO b_siniestralidad
  11.         FROM convenios
  12.         WHERE codigo_convenio = convenio COLLATE latin1_spanish_ci
  13.                 AND nit_intermediario = nit_inter COLLATE latin1_spanish_ci;
  14.         IF(b_siniestralidad = 'M') THEN
  15.             SET total_siniestralidad = (movilizado * porc_siniestralidad);
  16.         ELSE
  17.             SET total_siniestralidad = (ingreso * porc_siniestralidad);
  18.         END IF;
  19.          SELECT total_siniestralidad;
  20.     END$$
  21. DELIMITER ;

Saludos para Leonardo, que hoy se me adelantó...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)