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

Crear función

Estas en el tema de Crear función en el foro de Mysql en Foros del Web. Tengo problema con esta función, que intenta obtener el valor incrementado en un campo numérico. La función tiene dos argumentos: el nombre de la tabla ...
  #1 (permalink)  
Antiguo 13/05/2014, 16:46
 
Fecha de Ingreso: abril-2009
Mensajes: 1
Antigüedad: 15 años
Puntos: 0
Crear función

Tengo problema con esta función, que intenta obtener el valor incrementado en un campo numérico. La función tiene dos argumentos: el nombre de la tabla que contiene el campo y el nombre del mismo; pero en el SELECT MAX no me reconoce el valor dado en estos argumentos.

Código MySQL:
Ver original
  1. DELIMITER //
  2. CREATE FUNCTION INCREMENTAR(tabla VARCHAR(20), campo VARCHAR(20) ) RETURNS INT
  3. DECLARE valor INT;
  4. SELECT MAX(campo) INTO valor FROM tabla;
  5. SET valor = IF(valor is null, 1, valor + 1);
  6. RETURN valor;
  7. END //
  8. DELIMITER ;
  9. select incrementar('mi_db.mi_tabla', 'mi_campo_numerico');
¿Podéis ayudarme?

Última edición por gnzsoloyo; 13/05/2014 a las 17:54
  #2 (permalink)  
Antiguo 13/05/2014, 18:08
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, 4 meses
Puntos: 2658
Respuesta: Crear función

Tienes un error básico: Lo que quieres hacer requiere de sentencias preparadas (ver link), sin las cuales no se puede crear dinámicamente una consulta, basándose en valores que entran como parámetros (nombre de tabla y campos).
Por otro lado, hasta lo que yo sé, no está permitido el uso de
Código MySQL:
Ver original
  1. ... INTO @variable
dentro de una sentencia preparada, así que creo que deberás planearlo de otra forma.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, null, select, tabla
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 04:59.