2011-12-15 15 views
0

私は以下のストアドプロシージャを持っています。それは動作していないようです。私が間違っていることは何ですか?mysqlでselectで変数を宣言して使用する

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 
+0

エラーは? – ajreal

答えて

1

これを試してみてください。

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

実行SQL文では機能しませんでしたが、新しいルーチンを作成したときに機能しました。 – SupaOden

0

実際にあなたのクエリでCASE文のvariavle roleを宣言し、使用はOKですが、あなたのようなsemicolone ;とストアドプロシージャでのステートメントを分離する必要がありますt:his:

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

    CASE role 
    ... 
+0

実行SQL文では機能しませんでしたが、新しいルーチンを作成したときに機能しました。 - 今すぐasdgfas sagas – SupaOden

関連する問題