0
点赞
收藏
分享

微信扫一扫

数据库之存储过程和函数

目录

一、存储过程和函数概述

二、创建并调用存储过程和函数

1.创建存储过程

2.创建存储函数

3.调用存储过程和函数

三、关于存储过程和函数的表达式

1.变量

1.变量的分类

2.在存储过程和函数中应用变量

2.定义条件和处理程序

1.定义条件

2.定义处理程序

3.游标的使用

1.定义游标

2.打开游标

3.使用游标

4.关闭游标

4.流程控制的使用

四、查看存储过程和函数

1.查看存储过程和函数的状态

2.查看存储过程和函数的定义

3.查看存储过程和函数的信息

五、修改和删除存储过程和函数

1.修改存储过程和函数

2.删除存储过程和函数


一、存储过程和函数概述

存储过程和函数具有以下优点:


存储过程和函数也存在一定的缺陷:


二、创建并调用存储过程和函数


1.创建存储过程

创建存储过程使用SQL语句CREATE PROCEDURE来实现,其语法形式如下:



2.创建存储函数

创建存储函数使用SQL语句CREATE FUNCTION来实现,其语法形式如下:



3.调用存储过程和函数

存储过程必须使用关键字CALL调用,而存储函数与MySQL内置函数的调用相同,使用关键字SELECT。

1.调用存储过程

通常使用关键字CALL调用存储过程,其语法形式如下:

其中的parameter表示变量名,存储过程的返回值将赋予该变量。

2.调用存储函数

通常使用关键字SELECT调用存储函数,其语法形式如下:


三、关于存储过程和函数的表达式

1.变量

变量是表达式中最基本的元素,可用于存储临时数据。

1.变量的分类


2.在存储过程和函数中应用变量


(1)定义变量

在存储过程中使用DECLARE语句定义局部变量,其语法形式如下:

上述语句中,var_name为局部变量名称,type为变量的数据类型,DEFUALT value是为变量指定的默认值。如果没有DEFAULT value,初始值为NULL。

注:变量的定义必须在复合语句开头,并且在任何其他语句前面。也就是说,DECLARE语句在存储过程和函数中使用时,必须出现在BEGIN...END语句块的最前面,并且变量名不区分大小写。可以一次声明多个相同类型的变量。


(2)为变量赋值

定义变量之后,可以使用SET关键字为变量赋值,语法形式如下:

变量值可以为常量或者表达式。

另外,也可以使用SELECT...INTO...查询语句将查询结果赋给变量,这要求查询结果必须只有一行,具体语法形式如下:

Col_name为字段名,var_name为变量名。


2.定义条件和处理程序


1.定义条件

在MySQL中定义条件使用DECLARE...CONDITION语句,其语法形式如下:

上述语句中,condition_name表示条件名。Condition_type表示条件的类型,其可取值及其意义如下:

注:数值类型的错误代码不要使用0,因为0表示成功而不是错误;字符串类型的错误代码不要使用‘00’,因为‘00’表示成功而不是错误。


2.定义处理程序

在定义条件之后,可以使用DECLARE...HANDLER语句定义处理程序,语法形式如下:

下面简单介绍上述语句中各组成部分及其意义。


(1)handler_type为异常处理方式,可取值及其意义如下:


(2)condition_value表示错误值,可取值及其意义如下:


(3)statement为程序语句段,表示在遇到定义的异常条件时,需要执行的存储过程或函数。

定义处理程序有以下6中方法:


3.游标的使用

在存储过程和函数中,当查询语句返回多条记录时,可以使用游标对结果集进行逐条读取。


1.定义游标

在MySQL中,使用DECLARE关键字来定义游标,其语法形式如下:

上述语句中,cursor_name表示游标名,select_statement表示SELECT语句,返回一个用于创建游标的结果集。


2.打开游标

打开游标的关键字为OPEN,其语法形式如下:

注:在打开一个游标时,游标并不指向第一条记录,而是指向第一条记录的前边。


3.使用游标

使用游标的关键字是FETCH,其语法形式如下:

上述语句的作用是将定义游标cursor_name时查询出的数据赋予变量var_name。


4.关闭游标

关闭游标的关键字为CLOSE,其语法形式如下:


4.流程控制的使用

1.IF语句

IF实现条件判断,语句中可以包含多个判断条件,系统会根据条件的结果是否为TRUE执行相应的操作,语法形式如下:

上述语句中,search_condition为判断条件,statement_list为相应操作,如果所有判断条件均不为TRUE,则执行ELSE子句中的操作。


2.CASE语句

CASE语句可以实现比IF语句更复杂的条件操作,该语句有两种使用形式。

第1种语法形式如下:

上述语句中,case_expr表示判断条件的表达式,将此表达式与每个WHEN子句中的when_value值进行比较,直到与其中一个相等,此时,执行相应THEN子句中的statement_list。如果表达式与所有when_value值都不相等,则执行ELSE子句中的statement_list。

第2种语法形式如下:

上述语句中,系统会对每个WHEN子句中的search_condition表达式进行判断,直到某个search_condition表达式为TRUE,此时将执行其对应的THEN子句中的statement_list。如果所有search_condition表达式的值都不为TRUE,则执行ELSE子句中的statement_list。


3.LOOP语句和LEAVE语句

LOOP语句可以实现简单的循环,使得系统能够重复执行循环结构内的语句列表。该语句列表由一条或多条语句组成,每条语句使用(;)隔开。语法形式如下:

上述语句中,loop_list表示LOOP语句的标注名称(可以省略),statement_list表示需要循环执行的SQL语句。

如果不在statement_list中增加退出循环的语句,LOOP语句可以实现简单的死循环。使用LEAVE语句可以退出循环。语法形式如下:

其中,label参数表示循环的标注名。


4.REPEAT语句

REPEAT语句可以实现一个带条件判断的循环结构。语法形式如下:

repeat_label表示REPEAT语句的标注名称(可以省略),每次SQL语句statement_list执行完毕后,会对条件search_condition进行判断,如果结果为TRUE,循环结束,否则继续执行循环中的语句。


5.WHILE语句

WHILE语句同样可以实现一个带条件判断的循环结构,但与REPEAT语句不同的是,WHILE语句会先对条件进行判断,如果为TRUE,才会执行需要循环的操作,否则终止循环,语法形式如下:

上述语句中,while_label为WHILE语句的标注名称,search_condition为判断条件,statement_list为需要循环的操作。


6.ITERATE语句

ITERATE语句只可以出现在LOOP语句、REPEAT语句和WHILE语句中,意义为再次执行循环,语法形式如下:

上述语句中,label表示循环的标志。


四、查看存储过程和函数

1.查看存储过程和函数的状态

使用SHOW STATUS语句可以查看存储过程和函数的状态。基本语法形式如下:

PROCEDURE或FUNCTION指定查看的是存储过程还是函数,LIKE语句指定存储过程和函数的名称。

主要参数及其意义如下:


2.查看存储过程和函数的定义

使用SHOW CREATE语句可以查看存储过程和函数的定义语句,语法形式如下:

PROCEDURE或FUNCTION指定查看的是存储过程还是函数,pf_name指定存储过程或函数名。

主要参数及其意义如下:


3.查看存储过程和函数的信息

在MySQL中,存储过程和函数的信息存储在系统数据库information_schema中的routines表中,查看存储过程和函数详细信息的语法形式如下:

上述语句中,ROUTINE_NAME指定存储过程或函数名,如果有存储过程和存储函数名相同,还可以使用ROUTINE_TYPE指定类型。

主要参数及其意义如下:


五、修改和删除存储过程和函数

1.修改存储过程和函数

在MySQL中,使用ALTER关键字可以修改存储过程和函数,基本语法形式如下:

上述语句中,pf_name表示存储过程或函数名。characteristic表示存储过程和函数的特性,其可取值有CONTAINS SQL,NO SQL,READS SQL DATA,MODIFIES SQL DATA,SQL SECURITY{DEFINER|INVOKER},各值得意义与创建存储过程和函数时相同。


注:修改存储过程使用ALTER PROCEDURE语句,修改存储函数使用ALTER FUNCTION语句,这两个语句结构相同,参数也一样。并且它们与创建存储过程和函数得语句中的参数也基本一样。

不能使用关键字ALTER更改存储过程的参数或子程序,如果需要修改,必须删除存储过程后再重新创建。


2.删除存储过程和函数

在MySQL中,删除存储过程和函数可以使用DROP语句,语法形式如下:

pf_name为要删除的存储过程或函数名。使用IF EXISTS可以在执行删除操作时,先判断存储过程和函数是否存在,避免系统报错。

举报

相关推荐

0 条评论