Этот динамический sql работает нормально из командной строки sql, но если он выполняется из файла sql, то всегда возвращает 0, почему?
delimiter //
drop procedure if exists usp_validateUserLogin;
create procedure usp_validateUserLogin(in t varchar(255),
in username varchar(255),
in password varchar(255),out count int)
BEGIN
set @r=0;
set @tbl=concat('select count(*) into @r from ',t);
set @tbl2=concat(@tbl,' where @tbl.username=username and @tbl.password=password');
prepare pstmt from @tbl2;
execute pstmt;
set count=@r;
END//
delimiter ;
Выше код написан в файле, и я выполняю его из командной строки sql и компилируется без ошибок. когда я вызываю эту хранимую процедуру, она каждый раз возвращает ноль, хотя есть только одна запись, которая соответствует входному параметру. если я выполняю те же операторы из самой командной строки sql, то он работает правильно.
1 ответ
Решение
set @tbl=concat('select count(*) into @r from ',t, ' t ');
set @tbl2=concat(@tbl,' where t.username=', username, ' and t.password=', password');
и этого вопроса можно было бы избежать, если бы вы напечатали оператор sql, прежде чем пытаться выполнить его...