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

saber si existe

Estas en el tema de saber si existe en el foro de Mysql en Foros del Web. Bueno esto es algo facil supongo pero no puedo hacerlo El tema es asi... necesito insertar en una tabla un registro que tiene los campos ...
  #1 (permalink)  
Antiguo 25/02/2009, 20:44
 
Fecha de Ingreso: noviembre-2007
Mensajes: 133
Antigüedad: 16 años, 5 meses
Puntos: 0
saber si existe

Bueno esto es algo facil supongo pero no puedo hacerlo

El tema es asi... necesito insertar en una tabla un registro que tiene los campos codigo, indice. El codigo puede estar repetido o puede no estar por eso antes de insertar tengo que saber si esta, entonces si esta seleccione el indice mas alto y al nuevo registro le sumo 1. Si no esta directamente le pongo 1 al indice.

lo hago con un procedimiento almacenado pasandole como parametro el variablecodigo

algo asi

Código:
declare indicem int;

if exists (declare cursorindice cursor for select max(indice) from mov_com where codpro = variablecodigo)  then
                               open cursoindice;
                               fetch cursorindice into indicem;
                               set indicem = indicem +1
			       insert into mov_com (codigo, indice) values (variablecodigo, indicem);
else
				insert into mov_com (codigo, indice) values (variablecodigo, 1);
end if;
Si no tambien pense en declarar una variable y que su valor este como salida de la consulta alago asi

variable = select max(indice) from mov_com where codpro = variablecodigo
si variable el verdadera existe (hay registros), si es falsa no existe(no hay registros)

pero no se que tipo de variable usar y como usarla en este caso


pero eso no me funciona y no me refiero a la syntaxis del ejemplo, solo quiero saber cual seria la mejor forma de hacerlo
Si pueden ayudarme a optimizar el procedimiento les agredesco
  #2 (permalink)  
Antiguo 26/02/2009, 07:05
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: saber si existe

Tu procedimiento tiene varios errores:

1. Un CURSOR se declara al inicio de todo proceso e inmediatamente después de declarar todas las variables. No se puede declarar dentro de una función.

2. La cláusula IF EXISTS se usa para la sentencia DROP. No es una sentencia de MySQL por si misma, porque EXISTS no es una función sino una cláusula de otra sentencia.

3. Saber si algo ha dado resultado es simple: si no da resultado, devuelve NULL, por lo que la sentencia sería simplemente:
Código sql:
Ver original
  1. IF (SELECT MAX(indice) FROM mov_com WHERE codpro = variablecodigo) IS NULL THEN
  2.     SET  indicem = 1;
  3. ELSE
  4.     SET indicem =  (SELECT MAX(indice) FROM mov_com WHERE codpro = variablecodigo)  + 1;
  5. END IF;

Tip final: No uses un CURSOR para tareas tan elementales, consume muchos recursos del microprocesador inutilmente y no son optimizables. Úsalos solamente para tareas en las que realmente debas procesar un conjunto de registros.
__________________
¿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 26/02/2009, 07:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 133
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: saber si existe

Ok muchas gracias gnzsoloyo la verdad es que me estaba haciendo mucho lio y era algo tan simple... de todas formas sabia que tenia errores pero los deje para mostrar mas o menos lo que queria hacer
Muchas gracias
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 02:50.