Этот динамический 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, прежде чем пытаться выполнить его...

Другие вопросы по тегам