2011-02-04 89 views
0

我有点小白,当谈到一般的存储过程,但我想写以下不能创建MySQL存储过程

Create procedure clone_perms 
as 
declare @new_id varchar(30), @old_id varchar(30) 

declare get_perms cursor for select userspermsUserid, userspermsPermission from users_permissions where [email protected]_id 

declare @perms varchar(30), @on_off boolean 

FETCH get_perms into @perms, @on_off 
while(@@sqlstatus=0) 
BEGIN 
    if exists (select 1 from permissions where [email protected]_id and [email protected]) 
    BEGIN 
     update permissions set [email protected]_off where [email protected]_id and [email protected] 
    END 
    else 
    BEGIN 
     insert permissions (userspermsUserID, userspermsPermID, userspermsPermission) values (@new_id, @perms, @on_off) 
    END 

    FETCH get_perms into @perms, @on_off 
END 
CLOSE get_perms 

DEALLOCATE CURSOR get_perms 
end 

。尝试创建时出现以下错误:

/* SQL错误(1064):您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第二行使用'as declare @new_id varchar(30)declare @old_id varchar(30)declare get_perm'使用正确的语法*/

。有谁知道我需要做什么来完成这项工作?

+0

请在您的问题中包含服务器版本 – 2011-02-04 14:29:05

+0

我正在使用5.1.45社区 – Jonathan 2011-02-04 14:40:09

回答

0

你需要有BEGIN标签CREATE PROCEDURE clone_perms后不AS

0

不要使用@来启动本地(声明)变量名,那是只为你与

SET @varname创建用户变量=值;

声明。您还需要用分号终止您的语句。这是最新错误的原因,没有;在你的第一个声明之后。