存储过程和存储函数——语法

1. 变量

  • 声明(DECLARE)

-- DECLARE 可以定义一个局部变量,该变量作用范围智能在BEGIN...END中
DECLARE var_name[,...] type [DEFAULT value]

示例:

delimiter $

create procedure pro_test2()
begin
    declare num int default 5;
    select num+ 10;
end $

delimiter ;
  • 赋值(SET)

SET var_name = expr [, var_name=expr] ...

示例:

delimiter $

create procedure pro_test3()
begin
    declare name varchar(20);
    set name = "MYSQL";
    SELECT NAME;
end $

delimiter ;
  • 赋值(INTO)

-- ...
declare num int;
select count(*) into num from test;
-- ...

2. 条件判断(if)

if search_condition then statement_list
    [elseif search_condition then statement_list]...
    [else statement_list]
end if;

 示例:

-- 根据定义的身高变量,判定当前身高所属的身材类型
-- 180 及以上  ——> 身材高挑
-- 170—180    ——> 标准身材
-- 170 以下   ——> 一般身材

delimiter $

create procedure pro_test4()
begin

    declare height int default 175;
    declare desc varchar(10);
   
    if height >= 180 then
        set desc = "身材高挑";
    elseif height >= 170 and height < 180 then
        set desc = "标准身材";
    else
        set desc = "一般身材";
    end if;

    select desc;

end $

delimiter ;

3. 存储过程中的参数传递

create procedure pro_name([in/out/inout] 参数名 参数类型)

-- in:输入参数,默认是输入参数
-- out:返回参数,可以定义用户会话变量来存储,举例如下
-- 其中使用 @ 来定义用户会话变量
-- 补充:@@ 是定义系统变量的
call pro_test(10, @desc);
select @desc;
-- inout:输入和返回参数

4. 循环

-- 1. while

while search_condition do
    statement_list
end while

--2. repeat

repeat
    statement_list
until search_condition
end repeat;

-- 3. loop (可以使用leave语句实现,退出循环)

[begin_label:] loop
    statement_list
end loop [end_label]

5. 游标 / 光标

定义:用来存储查询结果集的数据类型,在存储过程和函数中可以使用光标对结果集进行循环处理。光标的使用包括光标的声明、OPEN、FETCH和CLOSE

1. 声明光标

declare cursor_name cursor for select_statement;

2. OPEN光标

open cursor_name;

3. FETCH光标

fetch cursor_name into var_name [, var_name] ...

4. CLOSE光标

close cursor_name;

6. 存储函数

delimiter $

-- 参数列表形式 [var_name type, ...]
create function func_name(param_list) returns type
begin
    statement_list
end $
delimiter ;

你可能感兴趣的:(MySQL高级—黑马视频笔记,mysql,数据库,database)