Объявление и использование переменных с select в mysql - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть следующая хранимая процедура.Это не похоже на работу.Есть ли что-то, что я делаю неправильно?

Ошибка возникает, когда я объявляю роль в 4-й строке.

create procedure getRole(in x mediumint unsigned)
begin

DECLARE role INT DEFAULT 3
SELECT user_level INTO role  FROM login_users WHERE user_id = x

        CASE role  
            WHEN 1 THEN  

            WHEN 2 THEN  
                select
                 u.user_level As role,
                 a.id As id,
                 'advisor' As user
                from
                 login_users u
                 inner join login_levels l on u.user_level =l.id
                 inner join rp_adviser a on u.user_id = a.user_id
                where
                 u.user_id = 11;   
            ELSE  
                select
                 u.user_level As role,
                 s.id As id,
                 'student' As user
                from
                 login_users u
                 inner join login_levels l on u.user_level =l.id
                 inner join rp_student s on u.user_id = s.user_id
                where
                 u.user_id = 9;  
                END CASE;  
    end 

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Попробуйте:

DROP PROCEDURE IF EXISTS `getRole` $$
CREATE PROCEDURE `q1a`.`getRole` (in x mediumint unsigned)
BEGIN

DECLARE role INT DEFAULT 3;
SELECT user_level INTO role  FROM login_users WHERE user_id = x;

if(role = 1 or role = 1)
then
select
                 u.user_level As role,
                 a.id As id,
                 'advisor' As user
                from
                 login_users u
                 inner join login_levels l on u.user_level =l.id
                 inner join rp_adviser a on u.user_id = a.user_id
                where
                 u.user_id = 11;
else
select
                 u.user_level As role,
                 s.id As id,
                 'student' As user
                from
                 login_users u
                 inner join login_levels l on u.user_level =l.id
                 inner join rp_student s on u.user_id = s.user_id
                where
                 u.user_id = 9;
end if;

END $$
0 голосов
/ 15 декабря 2011

На самом деле объявление и использование переменной role в операторе CASE в вашем запросе в порядке, но вам нужно разделить операторы в хранимой процедуре точкой с запятой ;, как т его:

DECLARE role INT DEFAULT 3;
SELECT user_level INTO role  FROM login_users WHERE user_id = x;

    CASE role
    ...  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...