2017-02-21 102 views
0

當我調用下面的存儲過程時,出現此錯誤: 錯誤1064(42000):您的SQL語法錯誤;在線)26.1」 1MySQL:無法使用存儲過程插入CURRENT_TIMESTAMP - 動態語句

CREATE PROCEDURE `update_xyz` (IN col_name VARCHAR(30), IN ip_add VARCHAR(24), IN lat FLOAT , IN longit FLOAT) 
BEGIN 
SET @col = col_name; 
SET @a_ip = ip_add; 
SET @lati = lat; 
SET @longitu = longit; 
IF ROW_COUNT()=0 THEN 
SET @time1 = CURRENT_TIMESTAMP(); 
SET @sql_text2 = concat('INSERT INTO table1 (ip,latitude,longitude,date,',@col,') VALUES (',INET_ATON(@a_ip),',', @lati,',', @longitu,',', @time1,',1)'); 
PREPARE stmt2 FROM @sql_text2; 
EXECUTE stmt2; 
DEALLOCATE PREPARE stmt2; 
END IF; 
END 

但是,如果我刪除@時間1,插入繼續留下DATETIME:檢查對應於你的MySQL服務器版本正確的語法附近'01使用手冊:53字段爲NULL。

回答

0

當我調試程序和動態查詢,然後我結識 ,你會期變量創建以下查詢

INSERT INTO table1 (ip,latitude,longitude,date,a) 
VALUES (3232235976,45.67,44.22,2017-02-21 12:30:00,1) 

在這裏意味着日期列中的數據應該是單引號像下面 「2017- 02-21 00:00:00'

然後你會擺脫你的錯誤

玩得開心:-)

+0

這工程!非常感謝你 –

+0

@TusharAgarwal你的wc –

1
change 
    //SET @time1 = CURRENT_TIMESTAMP();//remove this line 

    SET @sql_text2 = concat('INSERT INTO table1 (ip,latitude,longitude,date,',@col,') VALUES (',INET_ATON(@a_ip),',', @lati,',', @longitu,',', @time1,',1)'); 

replace this line. 

    SET @sql_text2 = concat('INSERT INTO table1 (ip,latitude,longitude,date,',@col,') VALUES (',INET_ATON(@a_ip),',', @lati,',', @longitu,',', CURRENT_TIMESTAMP(),',1)');