存储过程的例子

举例1:
 

 创建存储过程:
   DELIMITER $$
    CREATE
        PROCEDURE `zyh`.`if_else_`(
           IN num INT(11),
           OUT total VARCHAR(225)   
        )     
        BEGIN
           DECLARE num_ INT;
           SELECT COUNT(*) INTO num_ FROM goods WHERE pre_price > num;
           IF num_ > 1000 THEN 
             SET total = '大于1000条';
           ELSEIF (num_ > 1 AND num_ < 10) THEN 
             SET total = '大于1条 小于 10 条';
           ELSEIF (num_> 10 AND num_ < 1000) THEN 
             SET total ='大于10条小于 1000'; 
           END IF;      
         END$$
    DELIMITER ;
    
    调用存储过程:
       CALL if_else_(10,@total);
        SELECT @total;

 

举例2: 游标在存储过程中的使用:


   创建存储过程:
   

DELIMITER $$
CREATE  PROCEDURE `zyh`.`you_biao`()
    
    BEGIN
    DECLARE str VARCHAR(225) DEFAULT '';
    DECLARE finished INT DEFAULT 0;
    DECLARE v VARCHAR(20);
    DECLARE bonus_value CURSOR  FOR SELECT `value` FROM bonus;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
    OPEN bonus_value;
    get_value : LOOP
       FETCH bonus_value INTO v;
       IF finished = 1 THEN 
          LEAVE get_value;
       END IF;
       IF str != '' THEN   
          SET str= CONCAT(str,';',v);  
       ELSE  
          SET str = v;
       END IF;       
    END LOOP get_value;
    CLOSE  bonus_value;
    SELECT str;     
        
    END$$

DELIMITER ;  

调用存储过程: 
  call you_biao();

举例3:存储过程的时间的比较

DELIMITER $$

CREATE
    
    PROCEDURE `zyh`.`refreshGoods`()
    BEGIN
      DECLARE str VARCHAR(225) DEFAULT '';
      DECLARE finished INT DEFAULT FALSE;
      DECLARE good_id VARCHAR(225) DEFAULT '';
      DECLARE refresh_start_Time VARCHAR(225) DEFAULT '';
      DECLARE refresd_id VARCHAR(225) DEFAULT '';
      DECLARE refresh_end_Time VARCHAR(225) DEFAULT '';
      DECLARE goodsid VARCHAR(225) DEFAULT '';
      DECLARE isnotor INT(10);
      DECLARE nowtime VARCHAR(225) DEFAULT (SELECT  CONCAT(EXTRACT(HOUR FROM NOW()),':',EXTRACT(MINUTE FROM NOW())));
      DECLARE refreshPoint CURSOR  FOR SELECT rp.start_time,rp.refresh_goods_id,rp.end_time FROM refresh_point rp,refresh_goods rg WHERE rg.id = rp.refresh_goods_id AND rg.status=1;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
      OPEN  refreshPoint;
      get_refreshPoint : LOOP
         FETCH refreshPoint INTO refresh_start_Time,refresd_id,refresh_end_Time;
         IF  finished  THEN 
           LEAVE get_refreshPoint;
         END IF;
         IF (refresh_start_Time < nowtime && nowtime < refresh_end_Time)  THEN 
           SELECT rg.goods_id  INTO goodsid  FROM  refresh_goods rg WHERE rg.id = refresd_id;    

    SET good_id = goodsid ; 
    UPDATE goods SET datecreated = NOW() WHERE id=good_id;
    INSERT INTO refresh_history(id,goods_refresh_id,start_time,end_time,datecreated) VALUES(
    ROUND(ROUND(RAND(),5)*10000),refresd_id,refresh_start_Time,refresh_end_Time,NOW());
           
     END IF;
     END LOOP  get_refreshPoint;
     CLOSE refreshPoint;
    END$$

DELIMITER ;

4 存储过程的时间的比较:

DELIMITER $$

CREATE
     PROCEDURE `zyh`.`zhiding_expirydate`()
    BEGIN
    DECLARE str VARCHAR(225) DEFAULT '';
    DECLARE finished INT DEFAULT FALSE;
    DECLARE topgoodsid VARCHAR(50) DEFAULT '';
      DECLARE my_cursor CURSOR FOR(SELECT tg.expiry_date AS expiry_date,tg.id AS id FROM top_goods tg WHERE  tg.status !=2);
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
      OPEN my_cursor;
         get_cursor : LOOP 
            FETCH my_cursor INTO  str,topgoodsid;
            IF finished THEN
          LEAVE get_cursor    ;
        END IF;
        IF(NOW() > str) THEN 
          UPDATE top_goods t SET t.status=2 WHERE t.id= topgoodsid;
        END IF ; 
        END LOOP get_cursor;
        CLOSE my_cursor;
                    
    END$$

DELIMITER ;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值