Задавайте вопросы, мы ответим
Вы не зашли.
Всем доброго.
Никак не получается разобраться в хранимых процедурах. Логика составления запросов отнюдь не логична. =/
Вот конструкция:
Неактивен
Вы выводите в процедуре значение пользовательской переменной (@level), которая нигде не определена. По умолчанию она имеет значение null.
Неактивен
Я также пробовал выводить:
Неактивен
А зачем вам вообще второй select в процедуре, если у вас OUT p_level?
В доке есть хороший иллюстрирующий пример того, что вам нужно
http://dev.mysql.com/doc/refman/5.5/en/ … edure.html
Неактивен
Да я уже и так пробовал:
Неактивен
Вот такая конструкция хотя бы заработала, но возвращает только первую запись из таблицы:
Неактивен
Имеет ли поле level null значение в таблице?
И что по вашему мнению в запросе
WHERE email = email
означает email - это имя поля или параметра хранимой процедуры? И как это должен трактовать сервер?
Неактивен
Symbiot написал:
Вот такая конструкция хотя бы заработала, но возвращает только первую запись из таблицы:
CREATE PROCEDURE `adminAuth` (IN email VARCHAR(50), IN password VARCHAR(50), OUT p_level TINYINT(1))
BEGIN
SELECT level FROM table WHERE email = email AND password = password LIMIT 1;
END
Конструкция не очень хорошая, так как OUT p_level TINYINT(1) в ней совершенно лишний.
Покажите полностью как вы вызывали процедуру и получали null значение.
Относительно первой записи, см предыдущий мой ответ.
Неактивен
vasya написал:
Имеет ли поле level null значение в таблице?
И что по вашему мнению в запросе
WHERE email = email
означает email - это имя поля или параметра хранимой процедуры? И как это должен трактовать сервер?
Дефолтные значения поля `level` имеют NULL, но в них сейчас хранятся числовые значения.
По поводу email = email, я предполагаю, что mysql должен сам понимать, что email, который до знака "=" это поле, а после это значение. Возможно я ошибаюсь...
vasya написал:
Конструкция не очень хорошая, так как OUT p_level TINYINT(1) в ней совершенно лишний.
Покажите полностью как вы вызывали процедуру и получали null значение.
Структура процедуры:
Отредактированно Symbiot (22.12.2011 15:26:53)
Неактивен
Пожалуй, вы были правы, по поводу записей вида email = email. Видимо поэтому он и возвращал только первое поле таблицы.
Сейчас переписал процедуру таким образом:
Неактивен
Symbiot написал:
По поводу email = email, я предполагаю, что mysql должен сам понимать, что email, который до знака "=" это поле, а после это значение. Возможно я ошибаюсь...
Ошибаетесь. Вот хорошая иллюстрация на эту тему http://sqlinfo.ru/forum/viewtopic.php?pid=2513#p2513
Symbiot написал:
Структура процедуры:
CREATE PROCEDURE `adminAuth` (IN email VARCHAR(50), IN password VARCHAR(50), OUT p_level TINYINT(1))
BEGIN
SELECT level FROM table WHERE email = email AND password = password LIMIT 1;
END
Вызываю:
CALL adminAuth(@email, @password, @level)
У вас в теле процедуры не происходит присвоение параметру p_level, а сразу идет вывод полученного значения.
Вот если бы написали
SELECT level into p_level FROM table WHERE ...;
Неактивен
Понял.
Спасибо еще раз.
Неактивен