MySQL开发与实践第9章存储过程与存储函数.pdf
《MySQL开发与实践第9章存储过程与存储函数.pdf》由会员分享,可在线阅读,更多相关《MySQL开发与实践第9章存储过程与存储函数.pdf(35页珍藏版)》请在咨信网上搜索。
1、第9章存储过程与存储函数本章要求:了解流程控制语句的使用 了解MyS QL存储过程和函数中光标的使用和一般步骤 掌握MyS QL中存储过程和存储函数的创建 掌握MyS QL存储过程应用函数的参数使用方法 掌握存储过程和函数的调用、查看、修改和删除 掌握各种运算符的使用方法第9章存储过程与存储函数主要内容1.创建存储过程和存储函数2.存储过程和存储函数的调用3.查看存储过程和函数4.修改存储过程和函数5.删除存储过程和函数6.综合实例一一使用存储过程实现用户注册9.1创建存储过程和存储函数二二.9.1.1创建存储过程9.1.2创建存储函数9.1.3变量的应用9.1.4光标的运用9.1.1创建存储
2、过程 在MyS QL中,创建存储过程的基本形式如下:CREATE PROCEDURE sp_name(proc_parameter,.)characteristic.routine_body其中sp_name参数是存储过程的名称;proc_parameter表示存储过程的参数列表;characteristic参数指定存储过程的特性;routine_body参数是S QL代码的内容,可以用BEGIN.END.来标识S QL代码的开始和结束。说明:.proc_parameter中的参数由3部分组成,它们分别是输入输出类型、参数名称和参数类型。其形9 式为IN|OUT|INOUT param nam
3、e type。其中IN表示输入参数;OUT表示输出参数;INOUT表示.既可以输入也可以输出;paramjame参数是存储过程参数名称;type参数指定存储过程的参数类型,该类型可以为MyS QL数据库的注意数据类型。一个存储过程包括名字,参数列表,还可以包括很多SQL语句集。下面创建一个存储过程,其代 码如下:delimiter/create procedure proc_name(in parameter integer)begindeclare variable varchar(20);if parameter:1 thenset variable=MySQL;elseset varia
4、ble=PHP;end if;insert into tb(name)values(variable);end;MyS QL中存储过程的建立以关键字create procedure开始,后面仅跟存储过程的名称和参数。MyS QL的存储过程名称不区分大小写,例如PR 0C E1()和procel()代表同一存储过程名。存储过程名或 存储函数名不能与MyS QL数据库中的内建函数重名。二二二二MyS QL存储过程的语句块以begin开始,以end结束。语句体中可以包含变量的声明、控制语句、S QL查询语句等。由于存储过程内部语句要以分号结束,所以在定义存储过程前,应将语句结束标志”更改为其他字符,
5、并且应降低该字符在存储过程中出现的机率,更改结束标志可以用关键字“delimiter”定义,例如:mysqldelimiter/存储过程创建之后,可用如下语句进行删除,参数projname指存储过程名。drop procedure proc_name下面创建一个名称为count of student的存储过程。首先,创建一个名称为students的MyS QL数 据库,然后创建一个名为studentinfo的数据表。数据表结构如表9T所示:表9-1 studentinfo数据表结构字段名类型(长度)默认额外说明sidINT(11)auto_increment主键自增型sidnameVAR C
6、H AR(50)学生姓名ageVAR C H AR(ll)学生年龄sexVAR C H AR(2)M学生性别telBIGIN T(ll)联系电话【例9-1】创建一个名称为count_of_student的存储过程,统计studentinfo数据表中的记录数。.代码如下:delimiter/.create procedure count_ofLstudent(OUT count_num INT)reads sql databeginselect count(*)into count_num from studentinfo;end、人*_在上述代码中,定义一个输出变量count_num。存储过程
7、应用S ELEC T语句从studentinfo表中获取.记录总数。最后将结果传递给变量countnum。存储过程的执行结果如图9T所示。nysql nysql-delimiter/create procedure count_of_student reads sql data beginselect count into count_num from student info;end/Query OK,0 rows affected 图9-1创建存储过程countofstudent.代码执行完毕后,没有报出任何出错信息就表示存储函数已经创建成功。以后就可以调用这个.存储过程,数据库中会执行存
8、储过程中的S QL语句。.说明:MyS QL中默认的语句结束符为分号;存储过程中的S QL语句需要分号来结束。为了避免冲突,首 先用“DELIMITER”将MyS QL的结束符设置为。最后再用DELIMITER;来将结束符恢复成分号 o这与创建触发器时是一样的。9.1.2创建存储函数创建存储函数与创建存储过程大体相同。其创建存储函数的基本形式如下:CREATE FUNCTION sp_name(func_parameter,.)RETURNS typecharacteristic.routine_body创建存储函数的参窥说明如表9-2所示。表9-2 创建存储函数的参数说明参数说明sp_nam
9、 e存储函数的名称fun_pa rameter存储函数的参数列表R ETUR NS type指定返回值的类型charac teristic指定存储过程的特性routin e bodyS QL代码的内容func_parameter可以由多个参数组成,其中每个参数均由参数名称和参数类型组成,其结构如下:param_name typeparam_name参数是存储函数的函数名称;type参数用于指定存储函数的参数类型。该类型可以 是MyS QL如据库所支持的类型。【例9-2】同样,应用studentinfo表。创建名为name_of_student的存储函数。其代码如下:delimiter/crea
10、te function name_ofLstudent(std_id INT)returns varchar(50)beginreturn(select name from studentinfo where sid=std_id);end/上述代码中,存储函数的名称为name_of_student;该函数的参数为std_id;返回值是VAR C HAR 类型。该函数实现从studentinfo表查询与std_id相同sid值的记录。并将学生名称字段name中的值 返回。存储函数的执行结果如图9-2所示。nysql delimiter/mysql create function nane_of
11、_student-returns uarchar-begin-ieturn-end /Query OK,0 vows affected 图9-2 创建name of student()存储函数J二9.1.3变量的应用 MyS QL存储过程中的参数主要有局部参数和会话参数两种,这两种参数又可以被称为局部变量和.会话变量。局部变量只在定义该局部变量的beginend范围内有效,会话变量在整个存储过程范围 内均有效。.1.局部变量局部变量以关键字declare声明,后跟变量名和变量类型,例如:declare a int.当然在声名局部变量时也可以用关键字default为变量指定默认值,例如:.dec
12、lare a int default 10下述代码为读者展示如何在MyS QL存储过程中定义局部变量以及其使用方法。在该例中,分别在.内层和外层beginend块中都定义同名的变量x,按照语句从上到下执行的顺序,如果变量x在整个 程序中都有效,则最终结果应该都为inner,但真正的输出结果却不同,这说明在内部beginend块 中定义的变量只在该块内有效。【例9-3】该例子说明局部变量只在某个beginend块内有效。代码如下:delimiter/create procedure p 1()begindeclare x char(10)default outerbegindeclare x c
13、har(10)default innerselect x;end;select x;end;/上述代码的运行结果如图9-3所示。iysql delimiter/)ysql create procedure pl-begin-declare x char default,outer,;-begin-declare x char default 9 inner 9;-select x;-end;-select x;end;/!uery OK,0 rows affected 一图9-3定义局部变量的运行结果 应用MyS QL调用该存储过程的运行结果如图9-4所示。iysql call-+Xinner
14、 i row in set xouter row in set!uery OK,0 rows affected 图9-4调用存储过程pl()的运行结果2.全局变量MyS QL中的会话变量不必声明即可使用,会话变量在整个过程中有效,会话变量名以字符“作为起始字符。下述代码为会话变量的使用方法。【例9-4】在该例中,分别在内部和外部beginend块中都定义了同名的会话变量觥,并且最终输出结果相同,从而说明会话变量的作用范围为整个程序。设置全局变量的代码如下:delimiter/create procedure p2()beginset t=l;beginset t=2;select t;end;
15、select t;end;/上述代码的运行结果如图9-5所示。mysql delimiter/nysql create procedure p2-begin-set(?t=1;-begin-set(?t=2;-select Pt;-end;-select Pt;-end;-/Query OK,0 rows affected call p2O/Z-:et-!2!-1 row in set.-:et s-!2!-1 row in set 0.01 sec)Query OK.0 rows affected 图9-6调用存储过程p2()运行结果3.为变量赋值MyS QL中可以使用DEC LAR E关键
16、字来定义变量。定义变量的基本语法如下:DECLARE var_name,.type DEFAULT valueDEC LAR E是用来声明变量的;vajname参数是设置变量的名称。如果用户需要,也可以同时定义多个 变量;type参数用来指定变量的类型;DEFAULT value的作用是指定变量的默认值,不对该参数进行 设置时,其默认值为NULL。MyS QL中可以使用S ET关键字为变量赋值。S ET语句的基本语法如下:SET var_name=expr,var_name=expr.S ET关键字是用条为变量赋值;vajname参数是变量的名称;expr参数是赋值表达式。一个S ET语 句可
17、以同时为多个变量赋值,各个变量的赋值语句之间用“,”隔开。例如:为变量mr_soft赋值,代码如下:SET mr_soft=10:另外MyS QL中还可以应用另一种方式为变量赋值。其语法结构如下:SELECT col_name,.INTO var_name,.FROM table_name where condition其中col_name参数标识查询的字段名称;vajname参数是变量的名称;table_name参数为指定数据 表的名称;condition参数为指定查询条件。例如:从studentinfo表中查询name为“LeonS K”的记 录。将该记录下的tel字段内容赋值给变量cus
18、tomer_tel。其关键代码如下:SELECT tel INTO customer_tel FROM studentinfo WHERE name=LeonSK说明:上述赋值语句必须存在于创建的存储过程中。且需将赋值语句放置在BEGINEND之间。若脱离 此范围,该变量将不能使用或被赋值。9.1.4光标的运用通过MyS QL查询数据库,其结果可能为多条记录。在存储过程和函数中使用光标可以实现逐条读 取结果集中的记录。光标使用包括声明光标(DEC LAR E C UR S OR)、打开光标(OPEN C UR S OR)、使用光 标(FETC H C UR S OR)和关闭光标(C LOS E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 开发 实践 存储 过程 函数
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【曲****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【曲****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。