下述引用自《MySQL 必知必會》數據庫
MySQL命令行客戶機的分隔符 若是你使用的是MySQL命令行實用程序,應該仔細閱讀此說明。默認的MySQL語句分隔符爲;(正如你已經在迄今爲止所使用的MySQL語句中所看到的那樣)。MySQL命令行實用程序也使用;做爲語句分隔符。若是命令行實用程序要解釋存儲過程自身內的;字符,則它們最終不會成爲存儲過程的成分,這會使
存儲過程當中的SQL出現句法錯誤。
解決辦法是臨時更改命令行實用程序的語句分隔符,以下所示:spa
1 DELIMITER $$ 2 DROP procedure IF EXISTS PROC_GetGoodsDiscontForShop $$ 3 CREATE procedure PROC_GetGoodsDiscontForShop(IN regiondId varchar(50)) 4 BEGIN 5 SELECT b.shopname,a.goodsname,a.price,a.memberprice,round((a.memberprice/a.price),2) as GoodsDiscount 6 from shopinfo as b 7 LEFT JOIN goodsinfo as a on b.id=a.shopid 8 WHERE a.isdel=0 AND a.salestate=1 AND b.regionId IN (( 9 SELECT ID from region where ID=regiondId 10 UNION ALL 11 SELECT ID from region where SUPERIOR=regiondId 12 UNION ALL 13 SELECT ID from region where SUPERIOR IN ( 14 SELECT ID from region where SUPERIOR=regiondId 15 ) 16 UNION ALL 17 SELECT ID from region where SUPERIOR IN( 18 SELECT ID from region where SUPERIOR IN ( 19 SELECT ID from region where SUPERIOR=regiondId 20 )))); 21 22 END$$ 23 DELIMITER;
其中,DELIMITER $$告訴命令行實用程序使用$$做爲新的語句結束分隔符,能夠看到標誌存儲過程結束的END定義爲END$$而不是END;。這樣,存儲過程體內的;仍然保持不動,而且正確地傳遞給數據庫引擎。最後,爲恢復爲原來的語句分隔符,可以使用DELIMITER ;。除\符號外,任何字符均可以用做語句分隔符。命令行