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

Procedimiento Almacenado

Estas en el tema de Procedimiento Almacenado en el foro de Mysql en Foros del Web. Que onda banda les dejo un ejemplo de un Procedimiento almacenado que uso, el cual tengo un problema. No se realiza de manera correcta. Al ...
  #1 (permalink)  
Antiguo 01/02/2012, 10:42
Avatar de jmacc  
Fecha de Ingreso: marzo-2007
Ubicación: Mexico
Mensajes: 94
Antigüedad: 17 años, 1 mes
Puntos: 6
Pregunta Procedimiento Almacenado

Que onda banda les dejo un ejemplo de un Procedimiento almacenado que uso, el cual tengo un problema.
No se realiza de manera correcta.
Al realizar la llamada al Procedimiento primero debe de verificar que el codigo y la descripcion no esten .

Tabla:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `cantidades` (
  2.   `CantId` int(100) NOT NULL AUTO_INCREMENT,
  3.   `CantCantidad` int(100) NOT NULL,
  4.   `CantClaveProducto` int(100) NOT NULL,
  5.   `CantFiltro` varchar(100) NOT NULL,
  6.   PRIMARY KEY (`CantId`)
  7. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='Manejo de Cantidades de Productos'

Valores

Código MySQL:
Ver original
  1. INSERT INTO `cantidades` (`CantId`, `CantCantidad`, `CantClaveProducto`, `CantFiltro`) VALUES
  2. (1, 1, 10, 'Cat1'),
  3. (2, 1, 10, 'Cat1');

En caso de si estar la misma clave del producto,(CantClaveProducto) y el filtro (CantFiltro) solo se actualiza la cantidad
En caso de no estar se inserta el registro.

Mi Procedimiento Almacenado es el Siguiente:
Código MySQL:
Ver original
  1. REATE DEFINER=`root`@`localhost` PROCEDURE `aes_cantidades`(IN A INT,IN B INT,IN C VARCHAR(100))
  2. DECLARE consulta int;
  3.    
  4. SET consulta=("select CantCantidad, CantClaveProducto, CantFiltro from cantidades
  5. where CantClaveProducto=B AND CantFiltro=C");
  6.     if consulta='1' THEN
  7.          BEGIN
  8.             UPDATE cantidades set CantCantidad=A WHERE CantClaveProducto=B AND CantFiltro=C;
  9.         END;
  10.    ELSE
  11.         BEGIN
  12.             insert into cantidades (CantCantidad,CantClaveProducto,CantFiltro) values (A,B,C);
  13.         END;
  14.    END if ;

Espero me puedan echar uan mano para buscar el detalle, de antemano gracias.
  #2 (permalink)  
Antiguo 01/02/2012, 10:56
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: Procedimiento Almacenado

Mira, el primer problema es que estás confundiendo MySQL con Oracle o algo así.
MySQL no ejecuta sentencias contenidas en cadenas te texto como lo que has puesto. En todo caso se hace con sentencias preparadas, y no es lo que estás haciendo allí.
Incluso, si se trata de crear una sentencia preparada, estás haciendo cualquier cosa, porque las variables que usas de parámetros no están siendo incorporadas al SELECT, ya que se hace de otro modo (con CONCAT())
Mi sugerencia es que leas el tema de sentencias preparadas en el manual de referencia antes de seguir adelante.
__________________
¿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 01/02/2012, 11:32
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Procedimiento Almacenado

Hola jmacc:

Al margen de lo que comenta gnzsoloyo con respecto a las sentencias preparadas, te comento que hace apenas algunos días respondí un mensaje en donde se pedía algo muy parecido a lo que quieres hacer, pero utilizando la cláusula ON DUPLICATE KEY de la sentencia INSERT... en lo particular prefiero el uso de SP como lo estás queriendo hacer, pero esta es una opción que puede resultar más sencilla... dale un vistazo:

http://www.forosdelweb.com/f86/inser...tiempo-973038/

Creo que te puede servir.

Saludos
Leo.

Etiquetas: insert, procedure, update
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 18:49.