2011-02-04 23 views
0

を作成することはできません、それは一般的にストアドプロシージャに来るとき、私はnoobのビットんだけど、私はは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サーバのバージョンに対応するマニュアルをチェックして、正しい構文を使用してください。 'near declare @new_id varchar(30)declare @old_id varchar(30)declare get_perm' 2行目/

私はこの仕事をするために何をする必要があるのか​​誰にも分かっていますか? CREATE PROCEDURE clone_permsないAS

+0

ご質問にサーバのバージョンを含めてください –

+0

私は5.1.45コミュニティを使用しています – Jonathan

答えて

0

=値;

声明。ステートメントをセミコロンで終了する必要があります。それが最新のエラーの原因です。あなたの最初の宣言文の後。

+0

このエラーが発生しました。/* SQLエラー(1064):SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文を使用してください。BEGIN declare @new_id varchar(30)、@old_id varchar(30)declare get_perms cur 'on line 2 */ – Jonathan

+0

申し訳ありません、それが私が見つけた最も目障りな省略であった。私は適切な外観を持っています。 – anothershrubery

0

は、それが唯一あなたが

SETの@varnameで作成するユーザー変数のためだ、(宣言)ローカル変数名を開始するために、@を使用していない後にあなたがBEGINタグを持っている必要があり

関連する問題