2013-07-16 136 views
1

我有這樣的MySQL查詢創建一個存儲過程:MySQL存儲過程的語法錯誤

Delimiter //; 
Create Procedure addUser(
    IN facebookId varchar(20), 
     IN name varchar(50), 
     In accessToken varchar(100), 
     in expires float) 
Begin 
    Declare invitingUsers Table(Id varchar(20)); 

     Insert Into Users 
     (`Facebook_Id`,`Name`,`Access_Token`,`Expired`) Values (facebookId,name,accessToken,expires); 

     Select Inviting_Id 
     From Invited_Users 
     Where Invited_Id = facebookId 
     Into invitingUsers; 

     Update Table Users 
     Set Credit = Credit + 1 
     Where Facebook_Id In (Select Id From invitingUsers); 
End// 

,但我不斷收到此錯誤 - 不明白爲什麼:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Table(Id varchar(20)); Insert Into Users (`Facebook' at line 7 
+1

顯然mySql不使用表變量。解決方案是創建一個臨時表 –

回答

2

變化#1

Delimiter //;Delimiter //

常E·2

在內存中創建一個臨時表

更改#3

改變

Select Inviting_Id 
From Invited_Users 
Where Invited_Id = facebookId 
Into invitingUsers; 

INSERT INTO invitingUsers   
Select Inviting_Id From Invited_Users 
Where Invited_Id = facebookId; 

有了這些變化,我給你這一點:

Delimiter // 
Create Procedure addUser(
    IN facebookId varchar(20), 
     IN name varchar(50), 
     In accessToken varchar(100), 
     in expires float) 
Begin 
     Declare invitingUsers Table(Id varchar(20)); 

     Create temporary table if not exists invitingUsers 
     (Id varchar(20), PRIMARY KEY (id)) ENGINE=MEMORY; 

     Insert Into Users 
     (`Facebook_Id`,`Name`,`Access_Token`,`Expired`) 
     Values (facebookId,name,accessToken,expires); 

     INSERT INTO invitingUsers   
     Select Inviting_Id From Invited_Users 
     Where Invited_Id = facebookId; 

     Update Table Users 
     Set Credit = Credit + 1 
     Where Facebook_Id In (Select Id From invitingUsers); 
End// 
Delimiter ; 

試試看!