MySQL - Duda - Obtener ultimo ID en un procedimiento

Todos los comentarios sobre redes y servidores en linux y su interacción con otros sistemas operativos.

Moderadores: doc, Kde_Tony, ps-ax

Responder
Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1003
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

MySQL - Duda - Obtener ultimo ID en un procedimiento

Mensaje por Nagual » Sab Dic 05, 2009 2:58 am

Hola, buen dia a todos

Otra vez estoy molestando :oops:

Esta vez es con respecto a la obtencion de el id despues de una insercion, utilize:

select LAST_INSERT_ID() into variable

pero no me guarda el id y no puedo hacer otras inserciones donde necesito este valor...

seguro que es algun detallito que se me escapa... les agrego el codigo del procedimiento... es para registrar un equipo completo (cpu. monitor,teclado, raton) y relacionar todo de un jalon....

Código: Seleccionar todo

DELIMITER $$

DROP PROCEDURE IF EXISTS `inventario`.`pr_ins_equipocompleto` $$
CREATE DEFINER=`cecad`@`localhost` PROCEDURE `pr_ins_equipocompleto`(IN vidarea INTEGER, IN viddepositario INTEGER,
   IN pparte1_tipo INTEGER, IN pparte1_serie VARCHAR(30), IN pparte1_parte VARCHAR(30), IN pparte1_marca VARCHAR(20),
   IN pparte1_modelo VARCHAR(40), IN pparte1_descrip BLOB, IN pparte1_estado VARCHAR(24),
   IN pparte2_tipo INTEGER, IN pparte2_serie VARCHAR(30), IN pparte2_parte VARCHAR(30), IN pparte2_marca VARCHAR(20),
   IN pparte2_modelo VARCHAR(40), IN pparte2_descrip BLOB, IN pparte2_estado VARCHAR(24),
   IN pparte3_tipo INTEGER, IN pparte3_serie VARCHAR(30), IN pparte3_parte VARCHAR(30), IN pparte3_marca VARCHAR(20),
   IN pparte3_modelo VARCHAR(40), IN pparte3_descrip BLOB, IN pparte3_estado VARCHAR(24),
   IN pparte4_tipo INTEGER, IN pparte4_serie VARCHAR(30), IN pparte4_parte VARCHAR(30), IN pparte4_marca VARCHAR(20),
   IN pparte4_modelo VARCHAR(40), IN pparte4_descrip BLOB, IN pparte4_estado VARCHAR(24)
)
BEGIN
declare vidparte1 INTEGER;
declare vidparte2 INTEGER;
declare vidparte3 INTEGER;
declare vidparte4 INTEGER;
declare elementos INTEGER;

set vidparte1 = 0;
set vidparte2 = 0;
set vidparte3 = 0;
set vidparte4 = 0;
set elementos = 0;

   insert into equipo(id_tipo,serie,parte,marca,modelo,descripcion,estado)
          VALUES(pparte1_tipo,pparte1_serie,pparte1_parte,pparte1_marca,pparte1_modelo,pparte1_descrip, pparte1_estado);
   SELECT LAST_INSERT_ID() into vidparte1;
		  
    insert into equipo(id_tipo,serie,parte,marca,modelo,descripcion,estado)
          VALUES(pparte2_tipo,pparte2_serie,pparte2_parte,pparte2_marca,pparte2_modelo,pparte2_descrip, pparte2_estado);
    SELECT LAST_INSERT_ID() into vidparte2;
		  
	insert into equipo(id_tipo,serie,parte,marca,modelo,descripcion,estado)
          VALUES(pparte3_tipo,pparte3_serie,pparte3_parte,pparte3_marca,pparte3_modelo,pparte3_descrip, pparte3_estado);
    SELECT LAST_INSERT_ID() into vidparte3;
		  
	insert into equipo(id_tipo,serie,parte,marca,modelo,descripcion,estado)
          VALUES(pparte4_tipo,pparte4_serie,pparte4_parte,pparte4_marca,pparte4_modelo,pparte4_descrip, pparte4_estado);
    SELECT LAST_INSERT_ID() into vidparte4;
		        
   IF(vidparte1 IS NOT NULL) THEN
      insert into ubicacion(id_area,id_equipo) VALUES(vidarea,vidparte1);
	  insert into resguardo(id_depositario,id_equipo) VALUES(viddepositario,vidparte1);
	  set elementos = elementos + 1;
   END IF;
   
   IF(vidparte2 IS NOT NULL) THEN
      insert into ubicacion(id_area,id_equipo) VALUES(vidarea,vidparte2);
	  insert into resguardo(id_depositario,id_equipo) VALUES(viddepositario,vidparte2);
	  set elementos = elementos + 1;
   END IF;
   
   IF(vidparte3 IS NOT NULL) THEN
      insert into ubicacion(id_area,id_equipo) VALUES(vidarea,vidparte3);
	  insert into resguardo(id_depositario,id_equipo) VALUES(viddepositario,vidparte3);
	  set elementos = elementos + 1;
   END IF;
   
   IF(vidparte4 IS NOT NULL) THEN
      insert into ubicacion(id_area,id_equipo) VALUES(vidarea,vidparte4);
	  insert into resguardo(id_depositario,id_equipo) VALUES(viddepositario,vidparte4);
	  set elementos = elementos + 1;
   END IF;

   if (elementos = 4) THEN
      insert into equipo_completo(parte1,parte2,parte3,parte4) VALUES(vidparte1,vidparte2,vidparte3,vidparte4);
   END IF;

END $$
DELIMITER ;
Las inserciones a la tabla de equipo si las hace, pero no se obtienen los IDs correspondientes de esas inserciones, y por consiguiente, no puedo realizar las demas...

Agradeceria la orientacion que me puedan dar.

Sales pues :D
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax
Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1003
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

Re: MySQL - Duda - Obtener ultimo ID en un procedimiento

Mensaje por Nagual » Sab Dic 05, 2009 3:35 am

creo que habia un detalle en la ultima insercion, me equivoque de campos... pero lo raro es que no dejo realizar las inserciones anteriores... el de ubicacion y resguardo... la cosa es que corrigiendo la ultima insercion ya inserto todo lo demas...

Código: Seleccionar todo

if (elementos = 4) THEN
      insert into equipo_completo(id_parte1,id_parte2,id_parte3,id_parte4)    VALUES(vidparte1,vidparte2,vidparte3,vidparte4);
   END IF;
Gracias de todas maneras

Sales pues :D
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje