2017-09-20 59 views
0

您好我寫了這MySQL的存儲過程,我不斷收到這個語法錯誤MySQL語法錯誤|變量=變量+整數

#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 '@start := @start + 3600; 

END WHILE; 

@start = 1505469600; 
' at line 42 

這裏是我的存儲過程,我一直無法運行它又因爲語法錯誤所以它可能有一些問題。如果你發現任何問題,如果你能幫助我,這將會非常有幫助。

DELIMITER ;; 

CREATE PROCEDURE insert_zone_time_range_data() 

BEGIN 

SET @start = 1505469600, @end = 1505483940; 

WHILE @start < @end DO 

    WHILE @start < @end DO 

     INSERT INTO daily_stats_zone_visitors_time_range 
     (
      day_epoch, 
      day_of_week, 
      time_range_hours, 
      venue_id, 
      visitors, 
      visitors_new 
     ) 
     SELECT UNIX_TIMESTAMP(FROM_UNIXTIME(ts,'%Y-%m-%d')) AS day_epoch, 
     FROM_UNIXTIME(ts,'%W') AS day_of_week, 
     FROM_UNIXTIME(@start, '%h') + '-' + FROM_UNIXTIME(@end, '%h') AS time_range_hours, 
     venue_id, 
     COUNT(DISTINCT mac) AS visitors, 
     COUNT(id) AS visitors_new 
     FROM (    
      SELECT probe_request.venue_id, 
      probe_request.mac, 
      macs.id, 
      probe_request.ts 
      FROM probe_request 
      LEFT OUTER JOIN daily_stats_venue_mac_cache AS macs 
      ON probe_request.mac = macs.mac 
      AND probe_request.venue_id = macs.venue_id 
      AND macs.first_seen BETWEEN @start AND @end 
      WHERE probe_request.ts BETWEEN @start AND @end 
      GROUP BY probe_request.venue_id, probe_request.mac 
     ) AS temp 
     GROUP BY venue_id; 

     @start = @start + 3600; 

    END WHILE; 

    @start = 1505469600; 
    @end = @end - 3600; 

END WHILE; 

END; 
;; 

我加入了DELIMITER ;;到我的腳本的頂部,因爲我一直得到一個語法錯誤,當我設置我的變量,這似乎解決它。坦率地說,我不知道爲什麼,但現在似乎工作。

我沒有任何結果,你應該因爲錯誤,以便有關that.Thanks的幫助提前遺憾的是大加讚賞

+0

讓它'SET @啓動= 1505469600 ;'。 '@end = ...'相同。 – fancyPants

+1

'@start:= @start + 3600' – Blank

+0

@Forward我已經做出了這個改變,我得到了同樣的錯誤 –

回答

4

達到設定值時爲您必須使用Set關鍵字的變量。

這將是

set @start = @start + 3600 
+0

非常感謝! :) –

0

MySQL文檔關於user-defined variables說:設置一個用戶定義的變量

的一種方法是通過發出SET聲明:

SET @var_name = expr [, @var_name = expr] ... 

對於SET=或可以使用作爲賦值運算符。

您還可以在SET以外的語句中爲用戶變量賦值。在這種情況下,賦值操作符必須:=和不=因爲後者在非SET語句作爲比較運算符=處理:

mysql> SET @t1=1, @t2=2, @t3:=4; 
mysql> SELECT @t1, @t2, @t3, @t4 := @[email protected][email protected]; 

線:

@start = @start + 3600; 

不一個有效的MySQL語句(即使使用:=而不是=也是無效的)。在這種情況下值分配給變量@start正確的方法是使用SET聲明:

SET @start = @start + 3600; 

同其他兩個任務:

SET @start = 1505469600; 
SET @end = @end - 3600;