有誰知道錯誤在哪里?整個下午都在處理這個問題。Workbench 在指出錯誤方面不是很有用。
它出現在我的代碼中的下一個錯誤
CALL pCityMean('Spain') 錯誤代碼:1064。您的 SQL 語法有錯誤;檢查與您的 MariaDB 服務器版本相對應的手冊,以獲取在第 2 行的 '' 附近使用的正確語法。
DELIMITER $$
DROP PROCEDURE IF EXISTS pCityMean $$
CREATE PROCEDURE pCityMean (IN vPais VARCHAR(30))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE vID INT;
DECLARE cur1 CURSOR FOR SELECT distinct id_city FROM world_temp_stats.temp_by_city where id_country=(SELECT id_country FROM world_temp_stats.country where Name=vPais);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
bucle1: LOOP
FETCH cur1 INTO vID;
IF done = 1 THEN
LEAVE bucle1;
END IF;
SET @nomCiutat = (SELECT name FROM world_temp_stats.city WHERE id = vID);
SET @tablaCiutat = CONCAT ("SELECT year(dt), count(AverageTemperature), ROUND(avg(AverageTemperature), 2) INTO OUTFILE '",UCASE(vPais),"_",UCASE(@nomCiutat),"_temp_analisis.csv' FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n' FROM world_temp_stats.temp_by_city where id_country=(SELECT id_country FROM world_temp_stats.country where Name='",vPais,"' and id_city=",vID," group by year(dt)");
PREPARE execucio FROM @tablaCiutat;
EXECUTE execucio;
DEALLOCATE PREPARE execucio;
END LOOP bucle1;
CLOSE cur1;
END $$
DELIMITER ;
CALL pCityMean('Spain');
uj5u.com熱心網友回復:
我可以觀察您的查詢,我發現您忘記了右括號。
SET @tablaCiutat = CONCAT ("SELECT ...
where id_country=(
SELECT id_country FROM world_temp_stats.country
where Name='",vPais,"' and id_city=",vID," group by year(dt)
");
我認為您混淆了,因為year(dt)以右括號結尾,但是您還需要一個來關閉子查詢。類似于以下內容:
SET @tablaCiutat = CONCAT ("SELECT ...
where id_country=(
SELECT id_country FROM world_temp_stats.country
where Name='",vPais,"' and id_city=",vID," group by year(dt)
)
");
您還應該在準備好的查詢中對動態值使用查詢引數,而不是字串連接。
但如果是我,我會改變這段代碼的很多東西。為什么要使用INTO OUTFILE,為什么要使用存盤程序?根據我的經驗,MySQL 存盤程序比用幾乎任何客戶端編程語言撰寫代碼都要困難。我幾乎從不使用 MySQL 存盤程序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457353.html
標籤:mysql sql 数据库 句法 mysql-错误-1064
