第十一章 存储过程和函数

第一节:存储过程和函数的引入

存储过程和函数是在数据库中定义一些 SQL 语句的集合,然后直接调用这些存储过程和函数来执行已经定义好
的 SQL 语句。 存储过程和函数可以避免开发人员重复的编写相同的 SQL 语句。 而且, 存储过程和函数是在

MySQL
服务器中存储和执行的,可以减少客户端和服务器端的数据传输;

第二节:创建存储过程和函数

2.1 创建存储过程

CREATE PROCEDURE sp_name([proc_parameter[,...]])
[characteristic...] routine_body

sp_name 参数是存储过程的名称;
proc_parameter 表示存储过程的参数列表;
characteristic 参数指定存储过程的特性;
routine_body 参数是 SQL 代码的内容,可以用 BEGIN...END 来标志 SQL 代码的开始和结束。
proc_parameter 中的每个参数由 3 部分组成。这 3 部分分别是输入输出类型、参数名称和参数类型。
[ IN | OUT | INOUT ] param_name type
其中,IN 表示输入参数;OUT 表示输出参数;INOUT 表示既可以是输入,也可以是输出;param_name 参数是
存储过程的参数名称;type 参数指定存储过程的参数类型,该类型可以是 MySQL 数据库的任意数据类型;
Characteristic 参数有多个取值。其取值说明如下:
LANGUAGE SQL:说明 routine_body 部分是由 SQL 语言的语句组成,这也是数据库系统默认的语言。
[ NOT ] DETERMINISTIC :指明存储过程的执行结果是否是确定的。DETERMINISTIC 表示结果是确定的。每
次执行存储过程时,相同的输入会得到相同的输出。

NOT DETERMINISTIC 表示结果是非确定的,相同的输入可能得到不同的输出。默认情况下,结果是非确定的。
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } :指明子程序使用 SQL 语句的限制;
CONTAINS SQL 表示子程序包含 SQL 语句,但不包含读或写数据的语句;

NO SQL 表示子程序中不包含 SQL语句;

READS SQL DATA 表示子程序中包含读数据的语句;

MODIFIES SQL DATA 表示子程序中包含写数据的语句。默认情况下,系统会指定为 CONTAINS SQL;
SQL SECURITY { DEFINER | INVOKER };指明谁有权限来执行。

DEFINER 表示只有定义者自己才能够执行;
INVOKER 表示调用者可以执行。默认情况下,系统指定的权限是 DEFINER。
COMMENT ‘string’ :注释信息;

2.2 创建存储函数

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

sp_name 参数是存储函数的名称;

func_parameter 表示存储函数的参数列表;RETURNS type 指定返回值的类型;

characteristic 参数指定存储过程的特性,该参数的取值与存储过程中的取值是一样的;

routine_body 参数是 SQL 代码的内容,可以用 BEGIN...END 来标志 SQL 代码的开始和结束;
func_parameter 可以由多个参数组成,其中每个参数由参数名称和参数类型组成,其形式如下:
param_name type 其中,param_name 参数是存储函数的参数名称;

type 参数指定存储函数的参数类型,该类型可以是 MySQL 数据库的任意数据类型;

2.3 变量的使用
1,定义变量

DECLARE var_name [,...] type [ DEFAULT value ]

2,为变量赋值

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

SELECT col_name[,...] INTO var_name[,...]
FROM table_name WHERE condition

2.4 游标的使用

查询语句可能查询出多条记录,在存储过程和函数中使用游标来逐条读取查询结果集中的记录。游标的使
用包括声明游标、打开游标、使用游标和关闭游标。游标必须声明在处理程序之前,并且声明在变量和条
件之后。

1,声明游标

DECLARE cursor_name CURSOR FOR select_statement ;

2,打开游标

OPEN cursor_name;

3,使用游标

FETCH cursor_name INTO var_name [,var_name ... ];

4,关闭游标

CLOSE cursor_name;

2.5 流程控制的使用

存储过程和函数中可以使用流程控制来控制语句的执行。MySQL 中可以使用 IF 语句、CASE 语句、LOOP
语句、LEAVE 语句、ITERATE 语句、REPEAT 语句和 WHILE 语句来进行流程控制。

1,IF 语句

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

2,CASE 语句

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

3,LOOP,LEAVE 语句

LOOP 语句可以使某些特定的语句重复执行,实现一个简单的循环。但是 LOOP 语句本身没有停止循环
的语句,必须是遇到 LEAVE 语句等才能停止循环。LOOP 语句的语法的基本形式如下:
[begin_label:]LOOP
Statement_list
END LOOP [ end_label ]
LEAVE 语句主要用于跳出循环控制。语法形式如下:
LEAVE label

4,ITERATE 语句

ITERATE 语句也是用来跳出循环的语句。但是,ITERATE 语句是跳出本次循环,然后直接进入下一次
循环。基本语法:
ITERATE label ;

5,REPEAT 语句

REPEAT 语句是有条件控制的循环语句。当满足特定条件时,就会跳出循环语句。REPEAT 语句的基本
语法形式如下:
[ begin_label : ] REPEAT
Statement_list
UNTIL search_condition
END REPEAT [ end_label ]

6,WHILE 语句

[ begin_label : ] WHILE search_condition DO
Statement_list
END WHILE [ end_label ]

第三节:调用存储过程和函数

3.1 调用存储过程

CALL sp_name( [parameter[,...]] )

3.2 调用存储函数

fun_name( [parameter[,...]] )

第四节:查看存储过程和函数

4.1 SHOW STATUS 语句查看存储过程和函数的状态

SHOW { PROCEDURE | FUNCTION } STATUS [ LIKE ‘pattern’ ] ;

4.2 SHOW CREATE 语句查看存储过程的函数的定义

SHOW CREATE { PROCEDURE | FUNCTION } sp_name ;

4.3 从 information_schema.Routines 表中查看存储过程和函数的信息

第五节:修改存储过程和函数

ALTER { PROCEDURE | FUNCTION } sp_name [ characteristic ... ]
characteristic :
{ CONTAINS SQL } NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’

其中,sp_name 参数表示存储过程或函数的名称;characteristic 参数指定函数的特性。

CONTAINS SQL 表示子程序包含 SQL 语句,但不包含读或写数据的语句;

NO SQL 表示子程序中不包含 SQL 语句;

READS SQL DATA表 示 子 程 序 中 包 含 数 据 的 语 句 ;

MODIFIES SQL DATA 表 示 子 程 序 中 包 含 写 数 据 的 语 句 。 SQL
SECURITY{ DEFINER | INVODER } 指明谁有权限来执行。

DEFINER 表示只有定义者自己才能够执行;
INVODER 表示调用者可以执行。

COMMENT ‘string’ 是注释信息。

第六节:删除存储过程和函数

DROP {PROCEDURE | FUNCTION } sp_name ;

时间: 2024-10-06 23:30:01

第十一章 存储过程和函数的相关文章

mySQL教程 第7章 存储过程和函数

第7章 存储过程和函数 存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储过程和函数的区别 函数只能通过return语句返回单个值或者表对象.而存储过程不允许执行return,但是通过out参数返回多个值. 函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行. 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制

mySQL 教程 第7章 存储过程和函数

存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储过程和函数的区别 函数只能通过return语句返回单个值或者表对象.而存储过程不允许执行return,但是通过out参数返回多个值. 函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行. 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少 一般来说,

第十一章 使用数据处理函数

1.相比于sql的可移植性,函数的可移植性不强 2.文本处理函数 left() 返回串左边的字符 length() 返回串的长度 locate() 找出串的字串 lower() 将串转为小写 ltrim() 去掉左边的空格 ritht() 返回串右边的字符 rtrim() 去掉串右边的空格 soundex() 返回串的soundex值 暂不研究 substring() 返回串的字符 upper() 将串转换为大写 3.日期和时间处理函数 adddate() 增加一个日期 ADDDATE(date

《深入浅出Mysql》——第十二章 存储过程和函数 + 第十三章 触发器 + 第十四章 事物控制和锁定语句

MySQL 从 5.0.2 版本开始支持触发器的功能.触发器是与表有关的数据库对象,在满足定义 条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端 确保数据的完整性. MySQL 从 5.0.3 开始支持分布式事务,当前分布式事务只支持 InnoDB 存储引擎.一个 分布式事务会涉及多个行动,这些行动本身是事务性的.所有行动都必须一起成功完成,或 者一起被回滚 分布式的关键在于如何确保分布式事务的完整性,以及在某个分支出现问题时的故障解 决. 原文地址:https:

第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(3)

原文:第三章--使用系统函数.存储过程和DBCC SQLPERF命令来监控SQLServer(3) 本文为这个系列最后一篇.将是如何使用DBCC命令来监控SQLServer日志空间的使用情况. 前言: 每个数据库都必须有事务日志.事务日志记录每个DML操作,并应用于SQLServer的数据库中,如果恢复模式为FULL并经常有DML操作,日志将增长得非常快.几时恢复模式为simple,当数据库处于事务复制或者合并复制时,日志通常会增长.如果日志不是经常备份且日志文件的增长没有受到限制的话,将有可能

C Primer Plus (第五版) 第十一章 字符串和字符串函数 编程练习

第十一章 字符串和字符串函数 编程练习 设计并测试一个函数,可以输入读取n个字符(包括空格.制表符.换行符),把结果存储在一个数组中,这个数组的地址通过参数来传递. #include <stdio.h> #define LEN 80 char * getch(char a[], int n); int main(void) { char a[LEN]; if (getch(a, 4)) puts(a); else printf("没有读取\n"); return 0; }

《Python核心编程》第十一章:函数和函数式编程

本章大纲 介绍函数的创建.调用方式,内部函数.函数装饰器.函数参数的定义和传递.函数式编程.变量作用域.闭包. 知识点 11.1 什么是函数? 函数是对程序逻辑进行结构化或过程化的一种编程方法,以实现代码的复用. python 的过程就是函数,因为解释器会隐式地返回默认值 None. python 动态地确定函数返回类型,而不是进行直接的类型关联. 可以使用 type() 函数作为代理,处理有不同参数类型的函数的多重声明,以模拟其他编程语言的函数重载. 11.2 调用函数 11.2.1 关键字参

c++ primer 5th 笔记:第十一章

第十一章:关联容器 笔记 1. 关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的.与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的. 2. 关联容器支持高效的关键字查找和访问,两个主要的关联容器类型是map和set.map中的元素是一些关键字-值对:关键字起到索引的作用,值则表示与索引相关联的数据.set中每个元素只包含一个关键字:set支持高效的关键字查询操作--检查一个给定关键字是否在set中. 3. 当从map中提取一个元素时,会得到一个pair

第十一章 执行查询算法

第十一章      执行查询算法 基本概念: 三类查找方法:线性查找.树形查找.哈希表查找 动态查找表:在查找的同时,对表做修改操作(如插入和删除),则相应的表称为动态查找表 静态查找表:与动态查找表相反 查找过程中对关键字需要执行的平均比较次数(也称平均比较长度作为衡量一个查找算法优劣的标准 平均比较长度: 其中:n是结点的个数:pi是查找第i个结点的概率.若不特别申明,认为每个结点的查找概率相等,都为1/n:ci是找到第i个结点所需进行的比较次数. 线性查找: 基本思想:从表的一端开始,顺序