第5章 数据库编程 1、存储过程 2、存储函数

1.1 存储过程的基本概念

1.1.1 概念

  • 存储过程是一组为了完成某项特定功能的SQL语句集, 其实质就是一段存储在数据库中的代码。 它可以由声明式的sql语句和过程式sql语句组成。

1.1.2 优点(好处)

  • 可增强SQL语言的功能和灵活性
  • 良好的封装性
  • 高性能
  • 可减少网络流量
  • 可作为一种安全机制来确保数据库的安全性和数据的完整性

1.2 创建存储过程

1.2.1 用户定义的结束符(delimiter命令)

  • delimiter $$ ($$—>用户定义的结束符)
  • 示例:将mysql结束符修改为两个感叹号"!!" mysql>delimiter !!
  • 示例:回到";"结束 mysql>delimiter ;

1.2.2 使用CREATE PROCEDURE语句创建存储过程

CREATE PROCEDURE sp_name([proc_parameter[,…]]) routine_body [IN |OUT | INOUT] param_name type

  • sp_name:指定存储过程的名称,默认在当前数据库中创建
  • proc_paramete:指定存储过程的参数列表
  • routine_body:存储过程的主体部分,也称为存储过程体
  • param_name:参数名
  • type:参数的类型

1.2.3 练习

第5章 数据库编程
1、存储过程 
2、存储函数

1.3 存储过程体

1.3.1 使用DECLARE语句声明局部变量

DECLARE var_name[,…] type [DEFAULT value]

  • var_name:指定局部变量的名称
  • type:指定局部变量的数据类型
  • default value:局部变量指定一个默认值
  • 示例:声明一个整型局部变量cid. declare cid int(10);

1.3.2 使用DECLARE语句声明局部变量注意事项

  • 1)只能在存储过程体的BEGIN…END语句块中声明;
  • 2)必须在存储过程的开头处声明;
  • 3)作用范围仅限于声明它的BEGIN…END语句块;
  • 4)不同于用户变量.

1.3.3 局部变量与用户变量的区别

  • 1)局部变量声明时,在其前面没有@符号,并且它只能 被声明它的BEGIN…END语句块中的语句所使用;
  • 2)用户变量在声明时,会在其名称前面使用@符号,同 时已声明的用户变量存在于整个会话之中。

1.3.4 使用SET语句为局部变量赋值

  • SET var_name=expr[,var_name=expr]…
  • 示例:为局部变量cid赋予一个整数值910. set cid=910;

1.3.5 使用SELECT…INTO语句把选定列的值直接存储到局部变量中

第5章 数据库编程
1、存储过程 
2、存储函数

1.3.6 流程控制语句

        1)条件判断语句

          •    IF…THEN …ELSE语句

            •    IF 条件 THEN 表达式1 ELSE 表达式2 END IF;

          •   CASE语句

        2)循环语句

          •    WHILE语句

          •    while 条件 表达式 END while

          •    REPEAT语句

          •    repeat 表达式 END repeat

          •    LOOP语句

          •    loop 表达式 END loop

        3)ITERATE语句

            •    用于表示退出当前循环

1.3.7 使用DECLARE CURSOR语句创建游标

DECLARE cursor_name CURSOR FOR select_statement

  • cursor_name:指定要创建的游标的名称

1.3.8 使用OPEN语句打开游标

OPEN cursor_name

  • cursor_name:指定要打开的游标

1.3.9 使用FETCH…INTO语句读取游标

FETCH cursor_name INTO var_name[,var_name] …

  • cursor_name:指定已打开的游标
  • var_name:指定存放数据的变量名

1.3.10 使用CLOSE语句关闭游标

CLOSE cursor_name

  • cursor_name:用于要关闭的游标

1.3.11 总结

第5章 数据库编程
1、存储过程 
2、存储函数

1.4 调用存储过程

1.4.1 使用CALL语句调用存储过程

第5章 数据库编程
1、存储过程 
2、存储函数

  • sp_name:指定被调用的存储过程的名称
  • parameter:指定调用存储过程所要使用的参数

1.4.2 练习

第5章 数据库编程
1、存储过程 
2、存储函数

1.5 删除存储过程

1.5.1使用DROP PROCEDURE语句删除存储过程

        DROP PROCEDURE[IF EXISTS] sp_name

  • sp_name:指定要删除的存储过程的名称

1.6 总结

第5章 数据库编程
1、存储过程 
2、存储函数

2、存储函数

2.1 什么是存储函数

第5章 数据库编程
1、存储过程 
2、存储函数

2.2 创建存储函数

2.2.1 使用CREATE FUNCTION语句创建存储函数

CREATE FUNCTION sp_name([func_parameter[,…]]) RETURNS type routine_body

  • sp_name:指定存储函数的名称
  • func_parameter:指定存储函数的参数
  • RETURNS type :声明存储函数返回值的数据类型; type指定返回值的数据类型
  • routine_body :指定存储函数的主体部分,也称为存储函数体

2.2.2 练习

第5章 数据库编程
1、存储过程 
2、存储函数

2.3 调用存储函数

2.3.1 使用关键字SELECT调用存储函数

  • SELECT sp_name([func_parameter[, …]])

2.4 删除存储函数

2.4.1 使用DROP FUNCTION语句删除存储函数

  • DROP FUNCTION [IF EXISTS] sp_name