加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL4:存储过程和函数

发布时间:2020-12-12 00:03:40 所属栏目:MySql教程 来源:网络整理
导读:span style="color: #0000ff;"use span style="color: #000000;" school; span style="color: #0000ff;"create span style="color: #0000ff;"table span style="color: #000000;" student ( studentId span style="color: #0000ff;"int span style="color: #

<span style="color: #0000ff;">use<span style="color: #000000;"> school;

<span style="color: #0000ff;">create <span style="color: #0000ff;">table<span style="color: #000000;"> student
(
studentId <span style="color: #0000ff;">int <span style="color: #0000ff;">primary <span style="color: #0000ff;">key auto_increment <span style="color: #808080;">not <span style="color: #0000ff;">null<span style="color: #000000;">,studentName <span style="color: #0000ff;">varchar(<span style="color: #800000; font-weight: bold;">10) <span style="color: #808080;">not <span style="color: #0000ff;">null<span style="color: #000000;">,studentAge <span style="color: #0000ff;">int<span style="color: #000000;">,studentPhone <span style="color: #0000ff;">varchar(<span style="color: #800000; font-weight: bold;">15<span style="color: #000000;">)
)

<span style="color: #0000ff;">insert <span style="color: #0000ff;">into student <span style="color: #0000ff;">values(<span style="color: #0000ff;">null,<span style="color: #ff0000;">'<span style="color: #ff0000;">Betty<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">20<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">00000000<span style="color: #ff0000;">'<span style="color: #000000;">);
<span style="color: #0000ff;">insert <span style="color: #0000ff;">into student <span style="color: #0000ff;">values(<span style="color: #0000ff;">null,<span style="color: #ff0000;">'<span style="color: #ff0000;">Jerry<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">18<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">22222111<span style="color: #ff0000;">'<span style="color: #000000;">);
<span style="color: #0000ff;">insert <span style="color: #0000ff;">into student <span style="color: #0000ff;">values(<span style="color: #0000ff;">null,<span style="color: #ff0000;">'<span style="color: #ff0000;">21<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">22222222<span style="color: #ff0000;">'<span style="color: #000000;">);
<span style="color: #0000ff;">insert <span style="color: #0000ff;">into student <span style="color: #0000ff;">values(<span style="color: #0000ff;">null,<span style="color: #ff0000;">'<span style="color: #ff0000;">Steve<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">27<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">33333333<span style="color: #ff0000;">'<span style="color: #000000;">);
<span style="color: #0000ff;">insert <span style="color: #0000ff;">into student <span style="color: #0000ff;">values(<span style="color: #0000ff;">null,<span style="color: #ff0000;">'<span style="color: #ff0000;">James<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">22<span style="color: #ff0000;">',<span style="color: #ff0000;">'<span style="color: #ff0000;">44444444<span style="color: #ff0000;">'<span style="color: #000000;">);
<span style="color: #0000ff;">commit;

创建存储过程

sp_name()
routine_body

解释一下:

1、CREATE PROCEDURE为创建存储过程的关键字

2、sp_name为存储过程的名字

3、proc_parameter为指定存储过程的参数列表,列表形式为[IN|OUT|INOUT] param_name type。其中,IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出,param_name表示参数名称,type表示参数类型,该类型可以是MySQL数据库中的任意类型

4、characteristics指定存储过程的特性

5、routime_body是SQL代码的内容,可以用BEGIN...END来表示SQL代码的开始和结束

(studentAge) avgAge

上面都是不带参数的存储过程,下面看一个带参数的存储过程:

DELIMITER CountStudent( sName (),OUT num () num student studentName

func_name() routine_body

解释一下:

1、CREATE_FUNCTION为用来创建存储函数的关键字

2、func_name表示存储函数的名称

3、func_parameter为存储过程的参数列表,参数列表形式为[IN|OUT|INOUT] param_name type,和存储过程一样

4、RETURNS type表示函数返回数据的类型

5、characteristic表示存储函数的特性,和存储过程一样

举个例子:

NameByZip() ( ( studentPhone student studentName );

提两点:

1、如果在存储函数中的RETURN语句返回一个类型不同于函数的RETURNS自居指定的类型的值,返回值将被强制为恰当的类型

2、指定参数为IN、OUT或INOUT只对PROCEDURE是合法的(FUNCTION中总是默认为IN参数)。RETURNS子句只能对FUNCTION做指定,对于函数而言这是强制性的,它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句

变量可以在子程序中声明并使用,这些变量的作用范围是在BEGIN...END程序中,在存储过程中可以使用DECLARE语句定义变量,语法如下:

var_name... date_type

解释一下:

1、var_name为局部变量的名称

2、DEFAULT value子句给变量提供一个默认值,值除了可以被声明为一个常数之外,还可以被指定为一个表达式。如果没有DEFAULT子句,那么初始值为NULL

定义变量后,为变量赋值可以改变变量的默认值,MySQL使用SET为变量赋值:

var_nameexpr ...;

举个例子:

var1 var2,var3,var4 var2 ,var3 var4 var2 var3;

t_studentName ( t_studentAge studentName,studentId t_studentName,t_studentAge student studentName ; t_studentName ( t_studentAge

cursor_name

解释一下:

1、cursor_name表示游标的名称

2、select_statement表示SELECT语句返回的内容,返回一个用于创建游标的结果集

定义了游标,就要打开游标,打开游标的方法为:

再就是使用游标了,使用游标的方法为:

cursor_name var_name

t_studentName ( t_studentAge cur_student studentName,studentId student studentName cur_student cur_student;

studentName为Bruce的在数据里面不止一条记录,创建游标之后就从student表中查出了studentName和studentId的值。OPEN这个游标,通过FETCH之后遍历每一组studentName和studentAge,并放入申明的变量t_studentName和t_studentAge中,之后想怎么用这两个字段怎么用这两个字段了。注意,游标用完关闭掉。

expr_condition

比如:

t_studentName studentName t_studentName student studentName studentName student studentName ;

when_value

其中,case_expr参数表示判断的表达式,决定了哪一个WHEN自居会被执行;when_value表示表达式可能的值,如果某个when_value表达式与case_expr表达式结果相同,则执行对应THEN关键字后的statement_list中的语句;statement_list参数表示不同when_value值的执行语句。

CASE语句的第二种格式为:

expr_condition

只是写法稍微变了一下,参数还是第一种写法的意思

LOOP

6、REPEAT

REPEAT

CALL sp_name(

举个例子,就调用最前面那个CountStudent的存储过程:

CALL CountStudent(, ;

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

SHOW { } STATUS

这个语句是一个MySQL的扩展,他返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。如果没有指定样式,根据使用的语句,所有存储过程或存储函数的信息都被列出。PROCEDURE和FUNCTIOn分别表示查看存储过程和函数,LIKE语句表示匹配存储过程或函数的名称。

举个例子:

SHOW

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

SHOW { } sp_name

SHOW NameByZip

{ } sp_name

NameByZip;

这么简单就可以了。注意这里没有讲修改存储过程和存储函数,因为修改存储过程或者函数只能修改存储过程或者存储函数的特性,不能直接对已有的存储过程或函数进行修改,如果必须要改,只能先DROP在重新编写代码,CREATE一个新的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读