zoukankan      html  css  js  c++  java
  • mysql-18-function

    #函数
    /*
    存储过程:可以有0个或多个返回,适合批量插入、批量更新
    函数:有且仅有一个返回,适合处理数据后返回一个结果
    */
    
    #一、创建语法
    /*
    create function 函数名(参数列表)  returns 返回类型 
    begin
    	函数体
    end
    
    参数列表:
    	参数名 参数类型
    
    */
    
    use myemployees;
    set global log_bin_trust_function_creators=TRUE;
    
    #案例1:返回公司的员工个数
    delimiter &
    create function myf1() returns int
    begin
    	declare c int default 0;  #定义变量
        select count(*) into c  #赋值
        from employees;
        return c;
    end &
    #调用函数用select
    select myf1()&
    
    #案例2:根据员工名,返回工资
    create function myf2(empName varchar(20)) returns double
    begin
    	set @sal=0;
    	select salary into @sal
        from employees
        where last_name=empName;
        return @sal;
    end &
    
    select myf2('Kochhar')&
    
    
    #查看函数
    show create function myf2&
    
    
    #删除函数
    # drop function myf3;
    
    
    #流程控制结构
    /*
    顺序结构
    分支结构
    循环结构
    */
    
    #一、分支
    /*
    1.if函数
    select if(表达式1, 表达式2, 表达式3)
    如果表达式1成立,返回表达式2,否则返回表达式3
    
    2.case结构
    实现等值或区间判断
    case 变量|表达式|字段
    when 要判断的值 then 返回的值或语句1;
    when 要判断的值 then 返回的值或语句2;
    ...
    else 返回的值n;
    end case;
    
    */
    
    #案例:创建存储过程,跟据传入的成绩来显示等级
    create procedure test_case(
    	in score int
    )
    begin
    	case
        when score >=90 and score <= 100 then select 'A';
        when score >=80 then select 'B';
    	when score >=60 then select 'C';
        else select 'D';
        end case;
    end&
    
    call test_case(95)&
    
    #if结构,实现多重分支
    /*
    只能应用在begin end中
    
    if 条件1 then 语句1;
    elseif 条件2 then 语句2;
    ...
    else 语句n;
    end if; 
    */
    
    #案例:创建存储过程,跟据传入的成绩返回级别
    create function test_if(score int) returns char
    begin
    	if score >= 90 and score <= 100 then return 'A';
        elseif score >= 80 then return 'B';
        elseif score >=60 then return 'C';
        else return 'D';
        end if;
    end&
    
    select test_if(75)&
    
    
    #循环结构
    /*
    while, loop, repeat
    循环控制:
    	iterate 类似于continue
        leave 类似于break
        
    1、while
    【标签:】while 循环条件 do
    	循环体;
    end while 【标签】;
    
    
    2、loop
    【标签:】loop
    	循环体;
    end loop 【标签】;
    
    可以用来模拟简单的死循环
    
    
    3、repeat
    【标签:】repeat
    	循环体;
    until 结束条件
    end repeat 【标签】;
    */
    
    #案例:批量插入,根据次数插入到admin表中多条记录
    use girls&
    drop procedure pro_while1&
    create procedure pro_while1(
    in insertcount int
    )
    begin
    	declare i int default 1;
        while i <= insertcount do
    		insert into admin(username, password) values(concat('rois',i), '666');
            set i = i+1;
    	end while;
    end&
    
    call pro_while1(5)&
    select * from admin&
    
    #案例:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
    create procedure pro_while2(
    in insertcount int
    )
    begin
    	declare i int default 1;
        a:while i <= insertcount do
    		insert into admin(username, password) values(concat('xiaohua',i), '777');
            if i >= 20 then leave a;
            end if;
            set i = i+1;
    	end while a;
    end&
    
    call pro_while2(22)&
    select * from admin&
    

      

  • 相关阅读:
    CF101B Buses
    CF1C Ancient Berland Circus
    学习笔记 莫比乌斯反演简单整理
    P3768 简单的数学题
    P2508 [HAOI2008]圆上的整点
    CF19E Fairy
    P1295 [TJOI2011]书架
    CF1148B Born This Way
    CF13E Holes
    CF1148C Crazy Diamond
  • 原文地址:https://www.cnblogs.com/chaojunwang-ml/p/13261869.html
Copyright © 2011-2022 走看看