Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/05/2008, 22:17
Avatar de gnzsoloyo
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 con parametros

Cita:
En el segundo los apostrofes los utilizo porque rut esta como varchar en la base de datos (la verificacion del digito la hago antes)
¿ Y qué tiene que ver que rut sea un varchar?, si valor también es un varchar. Al entrar declarado en el prototipo, valor es una variable que CONTIENE un varchar. La comparación no se hace con el contenido de los apóstrofes, sino con el contenido de la variable.
Es exactamente lo mismo que si en Visual Basic quisieras comparar el contenido de una variable en un sub, poniendo el nombre de la variable entre comillas...
Cita:
Sip... eso lo se... lo que pasa es que si te fijas... en el primero toda la consulta es un string y utilizaba eso para identificar tabla como parte de un string, sin eso el procedimiento me daba error.
Pero el problema no es sólo ese, sino que el signo "+" no se usa para concatenar strings. El "+" espera la presencia de valores numéricos, no cadenas de texto. Para eso existe el CONCAT().
En realidad el código debería ser:
Código:
DELIMITER $$

DROP PROCEDURE IF EXISTS `checkIfExists` $$
CREATE PROCEDURE `checkIfExists`(IN tabla varchar(100), IN campo varchar(100), IN valor varchar(100))
BEGIN
SET @esql = concat('SELECT * FROM ', tabla, ' WHERE ', campo, ' = \'', valor, '\';');
PREPARE consulta FROM @esql;
EXECUTE consulta;
END $$

DELIMITER ;
Ya lo probé y la cadena de la sentencia se genera bien...

El segmento "\'" lo estoy escribiendo para que ponga el contenido de valor entre apóstrofes, suponiendo que lo que estás ingresando es un string. Sobre esto tiene que ver en el manual las secuencias de escape.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)