zoukankan      html  css  js  c++  java
  • 如何在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 ;。除符号外,任何字符都可以用作语句分隔符。

  • 相关阅读:
    「CSP-S 2019」初赛解析
    「SP741」STEAD
    「CF1382B」Sequential Nim
    「二分图」学习笔记
    题解 P3321 【[SDOI2015]序列统计】
    题解 P5339 【[TJOI2019]唱、跳、rap和篮球】
    题解 P3200 【[HNOI2009]有趣的数列】
    题解 P2606 【[ZJOI2010]排列计数】
    题解 CF1095F 【Make It Connected】
    题解 CF1155E 【Guess the Root】
  • 原文地址:https://www.cnblogs.com/January/p/5160032.html
Copyright © 2011-2022 走看看