Autor Tema: No puedo crear un procedimiento almacenado en MariaDB  (Leído 1865 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jose_lemus94

  • Trade Count: (0)
  • The newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Mensajes: 2
No puedo crear un procedimiento almacenado en MariaDB
« : octubre 07, 2016, 04:24:43 pm »
:sos: :sos:<img src="https://yb8hiq.dm
Hola a todos, este es mi primer post que hago con una inquietud, fijense que quiero hacer un Procedimiento almacenado en XAMPP (MariaDB), pero me da error el FETCH, no sé porqué, tengo que limpiar las variables cuando hago un loop, while o repeat???

Lo que quiero hacer es un procedimiento que me permita hacer una especie de back up de una tabla (auditoria) de base de datos (northwind) a otra tabla (aubk) de otra base de datos (moviendo), he tratado de muchas maneras y no puedo hacer que el procedimiento se guarde, el problema según MariaDB es que el FETCH es el problema, pero lo reviso y "al parecer: todo está bien", necesito una manita por favor, porque la tarea era para ayer, pero le escribí al ingeniero que me de chance ahora de enviarla y me he dado duro todo el día en eso, corregí muchos errores y en teoria sólo esa es la traba.



Estoy ocupando XAMPP, como base de datos MariaDB.

Este es el codigo:

DELIMITER //
CREATE PROCEDURE moviendo()
   BEGIN
      DECLARE codEmp INT;
      DECLARE fecha TIMESTAMP;
      DECLARE ipv4 VARCHAR(15);
      DECLARE comentario VARCHAR(100);
      DECLARE bolsa CURSOR FOR SELECT codEmp, fecha, ipv4, comentario FROM `auditoria`;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET @hecho = TRUE
      OPEN bolsa;
      
      REPEAT
         FETCH bolsa INTO codEmp,fecha,ipv4,comentario;
         IF comentario IS NULL THEN
         INSERT INTO `moviendo.aubk` VALUES (codEmp,fecha,ipv4,'NO HAY JUSTIFICACION DE MOVIMIENTO');
         ELSE
         INSERT INTO `moviendo.aubk` VALUES (codEmp,fecha,ipv4,comentario);
         END IF;
      UNTIL @hecho
      END REPEAT;
      CLOSE bolsa;
      SELECT codEmp, fecha, ipv4, comentario from `moviendo.aubk`;
   END;
//

Porfa se les agradecería que pudieran ayudarme.  :sos: :sos: :sos: :sos: :sos: :sos: :sos: :sos: :sos: :sos: :sos:
« Última Modificación: octubre 10, 2016, 10:41:39 am por jose_lemus94 »

Desconectado tekun

  • -^- Elite Silver -^-
  • Trade Count: (1)
  • The Communiter-
  • *
  • Thank You
  • -Given: 53
  • -Receive: 101
  • Mensajes: 3198
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:No puedo crear un procedimiento almacenado en MariaDB
« Respuesta #1 : octubre 10, 2016, 08:21:41 am »
y el error cuál es?
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado jose_lemus94

  • Trade Count: (0)
  • The newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Mensajes: 2
Re:No puedo crear un procedimiento almacenado en MariaDB
« Respuesta #2 : octubre 10, 2016, 10:37:33 am »
Hola tekun, mirá seguí probando el finde, y verifiqué si podía enviar desde una base de datos a otra, hice un insert, desde otra BD y se hizo:

Este es mi procedimiento que quiero crear (bueno ya cree, pero no me funciona):

BEGIN
        DECLARE codEmp INT(11);
        DECLARE fecha TIMESTAMP;
        DECLARE ipv4 VARCHAR(15);
        DECLARE comentario VARCHAR(100);
        DECLARE bolsa CURSOR FOR SELECT codEmp, fecha, ipv4, comentario FROM `auditoria`;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET @hecho = TRUE;
        OPEN bolsa;
       
WHILE @hecho=FALSE DO
FETCH bolsa INTO codEmp,fecha,ipv4,comentario;
            IF ipv4='123.456.789.101' THEN
            INSERT INTO moviendo.aubk VALUES (codEmp,fecha,ipv4,'ESTE ES EL JEFE');
            ELSE
            INSERT INTO moviendo.aubk VALUES (codEmp,fecha,ipv4,'SON SUBORDINADOS');
            END IF;
END WHILE;
       
CLOSE bolsa;
        SELECT codEmp, fecha, ipv4, comentario from moviendo.aubk;
    END


Lo que quiero que haga el procedimiento es que evalúe el campo ipv4, y, si la ip es una en específica que diga 'ESTE ES EL JEFE' y sino, 'SON SUBORDINADOS' y que los inserte en otra base de datos, pero siempre del mismo servidor y por último que me los muestre.

Pero me devuelve un error,  (disculpen mi ignorancia por desconocerlo)



 :sos: :sos: :sos:

Desconectado edu_guerr

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 51
  • -Receive: 70
  • Mensajes: 461
Re:No puedo crear un procedimiento almacenado en MariaDB
« Respuesta #3 : octubre 10, 2016, 03:41:00 pm »
Si solo queres mover de una tabla a otro, con esto bastaria:

Código: [Seleccionar]
BEGIN
   INSERT INTO  `moviendo.aubk` SELECT codEmp,fecha,ipv4,IF(ipv4 = '123.456.789.101', 'ESTE ES EL JEFE', 'SON SUBORDINADOS')  from auditoria;  
END

Te lo guardaria en tu tabla `moviendo.aubk`
Código: [Seleccionar]
codEmp             fecha      ipv4                       Comentario
1             2015-01-09       127.0.0.1                       SON SUBORDINADOS
2             2015-01-09      127.0.0.1                        SON SUBORDINADOS
3             2015-01-09       123.456.789.101                  ESTE ES EL JEFE

*Creado en MySQL