2014-01-10 69 views
1

我通過EXECUTE動態創建一個字符串來執行此操作。它會拋出一個異常 - 爲什麼?
正如您所看到的,我在嘗試執行之前返回了字符串。當我在MySQL客戶端運行這個結果而不是CALL procedure()時,它的工作完美無瑕。 如果我嘗試返回PREPARE d字符串,我不會得到任何結果。似乎PREPARE有點打破我的字符串。爲什麼我不能執行我的字符串?

例外

錯誤代碼:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的 '選擇MOVIE_NAME,@ClearLOGOs:= IF((SELECT COUNT(image_id)FROM movie_images WHE' 正確的語法手冊第1行

最重要的SQL

SET set_part = CONCAT(set_part, '; '); 
SET having_part = CONCAT(having_part, ' ORDER BY completeness ASC'); 
SET completeness_part = CONCAT(completeness_part, ') AS completeness'); 
SET complete_select = CONCAT('',set_part, select_part, completeness_part, ' FROM movie_items ',having_part); 

SET @exec = complete_select; 
SELECT @exec; 
PREPARE _exec FROM @exec; 
EXECUTE _exec; 

結果(未格式化,精確副本)

SET @ClearLOGOs=0, @ClearART=0, @cdART=0, @Movie_Backgrounds=0, @Movie_Banner=0, @HD_Movie_Logos=0, @Movie_Thumbs=0, @HD_ClearART=0, @Movie_Poster=0; SELECT movie_name, @ClearLOGOs:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '10' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS ClearLOGOs, @ClearART:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '11' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS ClearART, @cdART:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '12' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS cdART, @Movie_Backgrounds:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '16' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS Movie_Backgrounds, @Movie_Banner:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '19' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS Movie_Banner, @HD_Movie_Logos:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '23' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS HD_Movie_Logos, @Movie_Thumbs:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '24' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS Movie_Thumbs, @HD_ClearART:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '26' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS HD_ClearART, @Movie_Poster:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '29' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS Movie_Poster,(@ClearLOGOs + @ClearART + @cdART + @Movie_Backgrounds + @Movie_Banner + @HD_Movie_Logos + @Movie_Thumbs + @HD_ClearART + @Movie_Poster) AS completeness FROM movie_items HAVING ClearLOGOs > 0 OR ClearART > 0 OR cdART > 0 OR Movie_Backgrounds > 0 OR Movie_Banner > 0 OR HD_Movie_Logos > 0 OR Movie_Thumbs > 0 OR HD_ClearART > 0 OR Movie_Poster > 0 ORDER BY completeness ASC 
+0

保持從查詢中刪除小部件,直到它的工作原理,然後你刪除的最後一件事是問題 – Bohemian

+0

您使用什麼語言?例如,在PHP中,查詢不能包含';'。嘗試單獨進行每個查詢。 – rendon

+0

@rendon抱歉不夠清晰 - 我在mysql客戶端執行所有這些操作。 – Lucas

回答

相關問題