Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/04/2012, 14:00
tatipoveda25
 
Fecha de Ingreso: abril-2012
Mensajes: 6
Antigüedad: 12 años, 10 meses
Puntos: 0
Pregunta Problema con Procedimiento Almacenado

Hola Esta es la primera vez que me atrevo a hacer una pregunta, pero he investigado mucho sobre los problemas que tengo pero no logro solucionarlo así que espero alguno de ustedes me puedan ayudar...

Bueno entrando en materia tengo un procedimiento almacenado que recibe 5 parámetros de entrada.

Código SQL:
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(4), IN movilizado INT(255), IN ingreso INT(255), IN porc_siniestralidad  DOUBLE)
  5.     BEGIN
  6.         DECLARE b_siniestralidad VARCHAR(1);
  7.         DECLARE total_siniestralidad INT(255);
  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.  
  15.         IF(b_siniestralidad = 'M')
  16.             SET @total_siniestralidad = (movilizado * porc_siniestralidad);
  17.         ELSE
  18.             SET @total_siniestralidad = (ingreso * porc_siniestralidad);
  19.         END IF;
  20.  
  21.         SELECT @total_siniestralidad;
  22.     END;
  23.  //DELIMITER

El primer Problema que tengo es que no me corre por que aparece que tengo un error ([Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near) en la linea 13 y la verdad yo no encuentro el error...

Bueno el siguiente error que encontré un poco mas especifico, me di cuenta al probar cada una de las entradas que el procedimiento me esta cambiando el valor del parámetro de entrada movilizado en algunos casos por el numero 2147483647.

Procedimiento de prueba:
Código SQL:
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(4), IN movilizado INT(255), IN ingreso INT(255), IN porc_siniestralidad  DOUBLE )
  5.     BEGIN
  6.  
  7.         SELECT movilizado;
  8.    
  9.     END;
  10.  //DELIMITER

y el llamado de prueba es este:

Código SQL:
Ver original
  1. CALL TotalSiniestralidad('890300279', 1, 12373239017, 375660201, '1.5');

Y el result set es: 2147483647


No se por que estará pasando esto....

Agradezco de ante mano su colaboración