MYSQL存储过程

注意:delimter $$声明一个结束符,否则以;为结束符

主意:在SQL语句中声明变量且进行赋值时要使用default

1.变量及赋值

局部变量:用户自定义,在begin/end块中有效

声明变量:declare var_name type [default var_value]

举例:declare nickname varchar(32);

--set 赋值      --into赋值

用户变量:用户自定义,当前会话(连接)有效。类比java的成员变量

语法:@var_name,不需要提前声明,使用即声明

会话变量:由系统提供,当前会话连接有效

语法:@@session.var_name

全局变量:由系统提供,整个mysql的服务有效

语法:@@global.var_name

2.入参出参

in|out | inout param_name type

3.流程控制

3.1判断

IF语法:

IF search_condition THEN statement_list

    [ELSEIF search_condition THEN statement_list]...

    [ELSE statement_list]

END IF

CASE语法:此语法不仅可以用在存储过程,查询语句也可以用

语法—(类比java的switch)

CASE case_value

      WHEN when_value THEN statement_list

      [WHEN when_value THEN statement_list]...

      [ELSE statment_list]

END CASE

语法二

CASE

      WHEN search_condition THEN statement_list

      [WHEN search_condition THEN statement_list]...

      [ELSE statement_list]

END CASE

3.2循环

loop循环:  死循环

【begin_label:】LOOP

        statement_list

END LOOP [end_label]

说明:loop是死循环,需要手动退出循环,我们可以使用leave来退出

repeat循环:

【begin_label:】 REPEAT

      statement_list

UNTIL  search_condition  --直到...为止

END REPEAT [end_label]

while循环(类比java的while(){}):

[begin_label:] WHILE search_condition DO

      statement_list

END WHILE [end_lable]

3.3流程控制-退出、继续、循环

leave    相当于java中的break

iterate  相当于java中的continue

4.游标

用游标得到某一个结果集,逐行处理数据

类比jdbc的ResultSet

--声明语法

DECLARE cursor_name CURSOR FOR select_statement

--打开语法

OPEN cursor_name

--取值语法

FETCH cursor_name INTO var_name[,var_name]...

--关闭语法

CLOSE cursor_name

5.存储过程中的handler

语法:DECLARE handler_action HANDLER

                    FOR condition_value[,condition_value]...

                    statement

handler_action:{

CONTINUE | EXIT | UNDO

}

condition_value{

mysql_erroe_code

| SQLSTATE [VALUE] sqlstate_value

| condition_name

| SQLWARNING

| NOT FOUND

| SQLEXCEPTION

}

特别注意:在语法中,变量声明、游标声明、handler声明必须按照先后顺序写的,否则创建存储过程出错

注意:字符串拼接SQL语句需要预编译,当在mysql中使用prepare预编译拼接的字符串时不可以使用局部变量

创建临时表收集数据使用:create temporary table

`table_name`(字段)COLLATE = 'utf8_general_ci'

ENGINE=InnoDB;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容