2017-04-06 65 views
0
delimiter // 
create function kill_aliens (rand int) 

begin 

if rand <= 0.2 and rand >= 0 then 
delete from alienkilling limit 2 where dtypeid = 11; 

elseif rand <=0.75 and rand > 0.2 then 
delete from alienkilling limit 3 where dtypeid = 12; 

else rand <=1 and rand >0.75 then  
delete from alienkilling limit 1 where dtypeid = 13; 

end if; // 

它給了我一個語法錯誤如何使用delete語句在函數內部在MySQL

+0

發表你的問題的錯誤消息。它會指示語法錯誤的位置。 –

+1

初始刷,'else rand <= 1且rand> 0.75 then'這沒有意義。也許你的意思是'elseif' –

+0

錯誤代碼:1064.你的SQL語法有錯誤;檢查對應於您的MySQL服務器版本使用附近的正確的語法手動「開始 如果蘭特<= 0.2和RAND> = 0那麼 從那裏alienkilling極限2刪除」在行3 \t 0.000秒 @BurhanKhalid –

回答

0

有很多與你的函數定義問題,讓名單,然後:

1 - 您正在創建的功能,因此它需要一個returns聲明

2 - 你的刪除命令與錯誤的語法,limit應該是最後一個子句(之間,是沒有意義的限制刪除,雖然它的工作原理)

3 - 沒有THENELSE發言,並else不走的條件下,它應該是另一個ELSEIF

4 - 如果它是一個功能,你需要的東西return

5 - 你沒有與end語句結束你的函數

所以它應該是這樣的:

delimiter // 
create function kill_aliens (rand int) returns int 
begin 
    if rand <= 0.2 and rand >= 0 then 
     delete from alienkilling where dtypeid = 11 limit 2; 
    elseif rand <=0.75 and rand > 0.2 then 
     delete from alienkilling where dtypeid = 12 limit 3; 
    elseif rand <=1 and rand >0.75 then  
     delete from alienkilling where dtypeid = 13 limit 1; 
    end if; 

    return 0; -- it must be some value 
end // 
delimiter ; 

備註:瞭解如何縮進代碼。如果這不會返回任何東西,它應該是一個不是函數的過程。

喜歡的東西:

delimiter // 
create procedure kill_aliens (rand int) 
begin 
    if rand <= 0.2 and rand >= 0 then 
     delete from alienkilling where dtypeid = 11 limit 2; 
    elseif rand <=0.75 and rand > 0.2 then 
     delete from alienkilling where dtypeid = 12 limit 3; 
    elseif rand <=1 and rand >0.75 then  
     delete from alienkilling where dtypeid = 13 limit 1; 
    end if; 
end // 
delimiter ; 
+0

太棒了!它與程序一起工作。 –