• MYSQL存储过程学习


    1、游标的使用

    BEGIN
        DECLARE done INT DEFAULT 0;
        DECLARE userid INT;
        DECLARE rs CURSOR FOR SELECT `uid` FROM sinbegin_user WHERE service = 0;/*定义游标*/
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;/*异常处理*/
        OPEN rs;/*打开游标*/
            FETCH NEXT FROM rs INTO userid;
            REPEAT/*遍历数据表*/
                IF NOT done THEN
                    UPDATE sinbegin_user SET service = 1 WHERE uid = userid;
                END IF;
            FETCH NEXT FROM rs INTO userid;
            UNTIL done END REPEAT;
        CLOSE rs;/*关闭游标*/
    END
    DELIMITER $$
     
    CREATE DEFINER=`root`@`%` PROCEDURE `sp_pament_TrainFee`()
    BEGIN
    /*局部变量的定义 declare*/
    declare strYear int;
    declare strEnrollID int;
    declare feesum int;
    declare stop int default 0;
    declare cur cursor for(
    select  year ,EnrollID ,sum(Fee) from trainmanage  where ReturnStatus !=1 group by Year,EnrollID );
     /*这把 游标 异常后 捕捉
             *        并设置 循环使用 变量 stop 为 null 跳出循环。
    */
    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;
    /*开游标*/
    OPEN cur;
    /*游标向下走一步,将查询出来的值付给定义的变量*/
        FETCH cur INTO strYear,strEnrollID,feesum;
        WHILE ( stop is not null) DO
        update payment  set  ExpectTrain=feesum   where EnrollID = strEnrollID and right(ID,2) =right(strYear,2) ;
        FETCH cur INTO strYear,strEnrollID,feesum;
        END WHILE;
    /*游标向下走一步*/
    CLOSE cur;
    END

    2、IF条件判断的使用

    语法

    IF search_condition THEN statement_list
        [ELSEIF search_condition THEN statement_list] ...
        [ELSE statement_list]
    END IF

    示例代码

    IF CurrentLingQi >= 1800 THEN
        UPDATE socialrelation SET LingQi = 1800 WHERE NodeName = ShizuName;
    ELSE
         UPDATE socialrelation SET LingQi = LingQi + 60 WHERE NodeName = ShizuName;
    END IF;

     3、局部变量的定义

    DECLARE var_name[,...] type [DEFAULT value]  
    例如:
    DECLARE done INT DEFAULT 0;

    4、调用存储过程语法

    CALL sp_name([parameter[,...]]);
    示例:
    CALL test();--无参数
    CALL test(1,2)--带参数

    5、变量的两种赋值方法

    SET var_name = expr [, var_name = expr] ...
    SELECT col_name[,...] INTO var_name[,...] table_expr
    例如:
    set no='101010',title='存储过程中定义变量与赋值'; 
    select id into @id from tbl_currentWeather where cityid = _cityid;
    select  @id:=id,@cityid:=cityid  from tbl_currentWeather where cityid = _cityid;

     6、CASE语句

    CASE case_value
        WHEN when_value THEN statement_list
        [WHEN when_value THEN statement_list] ...
        [ELSE statement_list]
    END CASE

    Or:

    CASE
        WHEN search_condition THEN statement_list
        [WHEN search_condition THEN statement_list] ...
        [ELSE statement_list]
    END CASE
    例如;
    CASE
        WHEN (sale_value>200) THEN
            CALL free_shipping(sale_id);
            CASE customer_status
                WHEN 'PLATINUM' THEN
                    CALL apply_discount(sale_id,20);
                WHEN 'GOLD' THEN
                    CALL apply_discount(sale_id,15);
                WHEN 'SILVER' THEN
                    CALL apply_discount(sale_id,10);
                WHEN 'BRONZE' THEN
                    CALL apply_discount(sale_id,5);
            END CASE;
    END CASE;
    SELECT CASE 1 WHEN 1 THEN 'one'  WHEN 2 THEN 'two' ELSE 'more' END; 

    7、循环语句  

    loop leave iterate 实例

    CREATE PROCEDURE ABC()
       BEGIN
          DECLARE a INT Default 0 ;
          simple_loop: LOOP
             SET a=a+1;
             select a;
             IF a=5 THEN
                LEAVE simple_loop;
             END IF;
       END LOOP simple_loop;
    END

    REPEAT 实例

    create procedure pro
    begin
      declare a int default 3;
      repeat
       select a;
       set a=a+1;
      untile a>5 end repeat;
    end

    while实例

    create procedure pro
    begin
     declare a int default 4;
     while a<10 do
       select a;
       set a=a+1;
     end while;
    end
    更多可以参考:
    http://www.cnblogs.com/lyhabc/p/3793524.html

  • 相关阅读:
    对线性回归算法的评测
    HIVE cdh5.15.1搭建
    解决Shuffle$ShuffleError: error in shuffle in fetcher错误
    启动YARN资源管理器
    linux检测活体ip并邮件提醒
    Hadoop的NameNode进入安全模式
    Java操作Hadoop-HDFS API Maven环境搭建
    Hadoop CDH版本安装和启动(CentOS7)
    基于Redis的Nginx服务器集群session共享
    基于Memcached的Nginx服务器集群session共享
  • 原文地址:https://www.cnblogs.com/mssql8/p/4433754.html
Copyright © 2020-2023  润新知