如何在MySQL客戶端Navicat 上創建存儲過程返回結果集


下述引用自《MySQL 必知必會》

MySQL命令行客戶機的分隔符 如果你使用的是MySQL命令行實用程序,應該仔細閱讀此說明。默認的MySQL語句分隔符為;(正如你已經在迄今為止所使用的MySQL語句中所看到的那樣)。MySQL命令行實用程序也使用;作為語句分隔符。如果命令行實用程序要解釋存儲過程自身內的;字符,則它們最終不會成為存儲過程的成分,這會使
存儲過程中的SQL出現句法錯誤。
解決辦法是臨時更改命令行實用程序的語句分隔符,如下所示:

 

 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 ;。除\符號外,任何字符都可以用作語句分隔符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM