7 存储过程和函数ppt课件.pptx
《7 存储过程和函数ppt课件.pptx》由会员分享,可在线阅读,更多相关《7 存储过程和函数ppt课件.pptx(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习目标掌 握了解理解1掌握存储过程的创建、修改和执行、存储函数的创建和执行、常用内置函数的使用2理解存储过程的作用、常用内置函数的含义 3了解存储过程和存储函数、程序存储的类型MySQL程序设计基础7.17.1存储过程概述7.27.27.37.3创建和执行存储过程目录管理存储过程7.47.4存储函数7.57.5目录在MySQL中最常见的变量类型有局部变量和用户自定义变量两种。1.局部变量要定义局部变量必须使用DECLARE来声明,定义的同时可以使用default对局部变量初始化赋值。DECLARE语句格式如下:DECLARE var_name, type DEFAULT value valu
2、e是给变量提供一个默认值,包含在一个DEFAULT子句中,它的值可以被指定为一个表达式,如果没有DEFAULT子句,初始值为NULL。例如:DECLARE num int DEFAULT 0;7.1 MySQL程序设计基础7.1.1 变量2.用户自定义变量用户自定义变量的声明以“”开头,形如:var_name。为了实现不同SQL语句中进行值的传递,可以把一些数值存储在自定义的用户变量中,不同的SQL语句都可以对它进行访问。用户变量在客户端和数据库的连接建立时被定义,当连接断开时,用户变量将会被释放。用户变量无需用DECLARE关键字进行定义,可以直接使用。例如:SET c1=1, c2=2,
3、c3=4;在编写存储过程和存储函数时,可以使用流程控制语句对SQL语句进行组织,使其成为符合业务逻辑的代码块。MySQL中常见的流程控制语句主要有:IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句、REPEAT语句等。7.1.2 流程控制语句1.IF语句IF语句可以通过判断一个逻辑条件是TRUE还是FALSE,转去执行相应的语句,它的语法格式如下:IF expr_condition THEN statement_list ELSEIF expr_condition THEN statement_list ELSE statement_list END IF 2.CASE
4、语句CASE也是一个条件判断语句,多用于多分支判断的程序结构,它的常用语法格式如下:CASE case_expr WHEN when_value THEN statement_list WHEN when_value THEN statement_list ELSE statement_list END CASE3.LOOP语句LOOP是一个循环语句,用来进行一个语句块的循环操作。LOOP语句并不进行条件判断,会一直执行循环体的语句,如果要退出语句的执行,需要使用LEAVE等语句退出循环。LOOP语句的语法格式如下:loop_label: LOOP Statement_list END LOO
5、t_listP loop_label4.LEAVE语句在循环语句LOOP使用过程中,当循环条件不满足时,可以使用LEAVE语句跳出循环体。LEAVE语句用于跳出有循环标志的流程控制语句,基本语法结构如下:LEAVE label5.ITERATE语句与LEAVE语句结束整个循环不同,ITERATE语句用于无条件转到语句段的开头处。ITERATE语句的格式如下:ITERATE lable6.REPEAT语句REPEAT语句用于循环执行一个语句块,采用的方式是先无条件执行语句块后再进行条件表达式判断,如果表达式为真,则循环结束,否则重复执行语句块。REPEAT语句的格式如下:repeat_lable
6、: REPEAT statement_list UNTIL expr_condition END REPEAT repeat_lable7.WHILE语句WHILE语句也用于循环执行一个语句块,但是与REPEAT语句不同,WHILE语句执行时首先判断条件表达式是否为真,如果为真则继续执行循环体内语句,否则直接退出循环体。WHILE语句的格式如下:while_lable: WHILE expr_condition DO Statement_list END WHILE while_lable使用SQL语句进行查询过程中,查询结果将返回很多记录,如果记录量很大时,需要使用光标来对查询结果集中的记录
7、进行逐条读取,它可以对多行数据进行轻松的处理。7.1.3 光标1.光标的声明在使用光标对结果集中的数据进行处理时,需要首先声明光标,光标的声明必须在声明变量、条件之后,声明处理程序之前。光标的声明格式如下:DECLARE cursor_name CURSOR FOR select_statement其中cursor_name表示光标的名字,select_statement代表SELECT语句的内容,返回一个用于创建光标的结果集。下面声明一个名为cur_teacher的光标。代码如下:DECLARE cur_xsxx CURSOR FOR SELECT xh,xmFROM tb_xsxxb;2.
8、光标的使用MySQL中使用OPEN关键字来打开光标,打开光标之后就可以使用光标了。其语法的基本形式如下:OPEN cursor_name ;FETCH cursor_name INTO var_name,var_name ;下面我们使用一个名为cur_teacher的光标。将查询出来的数据存入xs_xh和xs_xm这两个变量中,代码如下:FETCH cur_xsxx INTO xs_xh,xs_xm;3.光标的关闭MySQL中使用CLOSE关键字来关闭光标。其语法的基本形式如下:CLOSE cursor_name ;其中,cursor_name参数表示光标的名称。示例:下面关闭一个名为cur_
9、teacher的光标。代码如下:CLOSE cur_teacher;下面举一个例子,使用光标查询显示学生信息表tb_xsxxb中所有学生学号和姓名的字段信息,代码段如下:delimiter /CREATE PROCEDURE p_1()BEGINDECLARE no_more_record INT DEFAULT 0;DECLARE t_XH char(12);DECLARE t_XM varchar(30);DECLARE cur_record CURSOR FOR SELECT XH,XM from tb_xsxxb; /*首先对游标进行定义*/DECLARE CONTINUE HANDL
10、ER FOR NOT FOUND SET no_more_record = 1;/*条件处理,针对NOT FOUND的条件,当没有记录时no_more_record赋值为1*/OPEN cur_record; /*使用OPEN打开游标*/FETCH cur_record INTO t_XH,t_XM; /*读取一条记录到变量中*/WHILE no_more_record != 1 DO /*如果记录未读取结束*/SELECT t_XH,t_XM;FETCH cur_record INTO t_XH,t_XM; /*继续读取下一条记录到变量中*/END WHILE;CLOSE cur_recor
11、d; /*用完后需要用CLOSE把资源释放掉*/END;/存储过程是数据库服务器上一组预先编译好的SQL语句的集合,作为一个单元存储在数据库中,可以被应用程序作为一个整体来进行调用。在调用过程中,存储过程可以接收参数,执行后返回参数值。7.2 存储过程概述数据库开发人员在进行数据库开发时,为了实现一定的功能,经常会将负责不同功能的语句集中起来而且按照用途分别独立放置,以便能够反复调用,而这些独立放置且拥有不同功能的语句块,称之为“过程”(Procedure)。存储过程(Stored Procedure)是一组完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过过程名和给出参数值来调用它
12、们。7.2.1 存储过程基本概念MySQL的存储程序可分以下四大类:(1)存储函数(stored function)。返回一个计算结果,该结果可以用在表达式里。(2)存储过程(stored procedure)。不直接返回一个结果,但可以用来完成一般的运算或是生成一个结果集并传递回客户。(3)触发器(trigger)。与数据表相关联,当那个数据表被INSERT、DELETE、UPDATE语句修改时,触发器将自动执行。(4)事件(event)。根据时间表在预订时刻自动执行。7.2.2 存储过程的类型(1)存储过程的使用,提高了程序设计的灵活性,增强了SQL语言的功能。(2)存储过程把一组功能代码
13、作为单位组件。(3)使用存储过程有利于提高程序的执行速度。(4)使用存储过程能减少网络访问的负荷。(5) 作为一种安全机制,系统管理员可以充分利用存储过程对相应的数据的访问权限的进行限制。7.2.3 存储过程的作用创建存储过程语法格式如下:7.3 创建和执行存储过程7.3.1 创建和执行不带参数的存储过程创建一个存储过程 p_1,该存储过程输出学生信息表tb_xsxxb表中姓“王”的全部记录。对应的SQL语句如下:DELIMITER /CREATE PROCEDURE p_1()BEGIN SELECT * FROM tb_xsxxb WHERE xm like 王%;END;/使用SQL语句
14、执行例7-2中创建的存储过程p_1。对应的SQL语句如下:执行结果如下所示:USE jwxt;CALL p_1();创建一个存储函数 f_1,输出1+1的和;创建一个存储函数f_2,输入两个参数,计算两个参数的和。对应的SQL语句如下:DELIMITER /CREATE FUNCTION f_1()BEGIN RETURN 1+1;END;/DELIMITER /CREATE DEFINER=rootlocalhost FUNCTION f_2(a int,b int) RETURNS int(11)BEGINRETURN a+b;END/使用SQL语句分别执行例7-4中创建的存储函数f_1和
15、f_2。对应的SQL语句如下:执行结果如下所示:USE jwxt;select f_1();USE jwxt;select f_2(10,10);7.3.2 创建和执行带输入参数的存储过程(1)使用变量名传递参数值在执行存储过程的语句中,通过语句SET parameter_name=value设定给参数的传递值,然后按位置传递参数。其语法格式如下:CALL procedure_name (parameter_name=value ,n);创建一个名为p_2的存储过程。该存储过程能根据用户给定的教师职称值输出教师信息表tb_jsxxb中教师职称为用户给定值的全部记录。该存储过程的SQL语句如下:
16、delimiter /CREATE PROCEDURE p_2(IN jszc varchar(10)BEGINselect * from tb_jsxxb where zc=jszc;END;/调用存储过程 p_2,给定职称值为“讲师”,运行结果如下:2.执行带输入参数的存储过程执行带输入参数的存储过程,有两种方法:一种是使用变量名传递参数值;另一种是按给定表达式值传递参数值。 DELIMITER /SET 输入职称=讲师;CALL p_2(输入职称);/DELIMITER ; (2)按给定表达式值传递参数在执行存储过程的语句中,当存储过程含有多个输入参数时,采用这种方式传递值,给定参数值的
17、顺序必须与存储过程中定义的输入变量的顺序一致。其语法格式如下:CALL procedure_name(value1,value2,)用按给定表达式值传递参数的方式执行存储过程p_2,分别查找职称为“讲师”和“副教授”的记录。对应的SQL语句如下:CALL p_2(讲师);CALL p_2(副教授);7.3.3 创建和执行带输出参数的存储过程创建存储过程p_3,要求能根据用户给定的班级代码值,统计出学生信息表tb_xsxxb表中对应班级代码的班级人数,并将结果以输出变量的形式返回给调用者。DELIMITER /CREATE PROCEDURE p_3(IN bjdm char(2),OUT bj
18、rs tinyint) BEGIN SELECT COUNT(*) INTO bjrs FROM tb_xsxxb WHERE bjdm=bjdm;END/DELIMITER;执行存储过程p_3,统计班级代码为“01”的班级人数。运行结果:CALL p_3(01,a01);SELECT a01;(1)我们可以用SELECT name FROM mysql.proc WHERE db=数据库名,或者SELECT routine_name FROM information_schema.routines WHERE routine_schema=数据库名, 或者SHOW PROCEDURE STA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储过程和函数ppt课件 存储 过程 函数 ppt 课件
限制150内