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.