mysql课件第十四章存储过程和函数.ppt
《mysql课件第十四章存储过程和函数.ppt》由会员分享,可在线阅读,更多相关《mysql课件第十四章存储过程和函数.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MySql数据库数据库天津理工大学 华信软件学院 田春艳 2011年9月-2012年1月 Mysql入门很简单 田春艳 存储过程和函数存储过程和函数(存储过程和函数(1)n n存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。Mysql入门很简单 田春艳 存储过程和函数存储过程和函数(存储过程和函数(2)n n将使用的一组SQL语句的组合在一起,并将这些SQL语句当作一个整体存储在My
2、SQL服务器中。n n例如,银行经常需要计算用户的利息。不同类别例如,银行经常需要计算用户的利息。不同类别的用户的利率是不一样的。这就可以将计算利率的用户的利率是不一样的。这就可以将计算利率的的SQLSQL代码写成一个存储过程或者存储函数。只要代码写成一个存储过程或者存储函数。只要调用这个存储过程或者存储函数,就可以将不同调用这个存储过程或者存储函数,就可以将不同类别用户的利息计算出来。类别用户的利息计算出来。Mysql入门很简单 田春艳 存储过程和函数内容内容n n创建存储过程和函数定义创建存储过程和函数定义n n变量的定义赋值n n定义条件和处理程序n n游标的使用n n流程控制的使用n
3、n修改存储过程和函数n n删除存储过程和函数 Mysql入门很简单 田春艳 存储过程和函数创建存储过程创建存储过程n nMySQL中,创建存储过程的基本形式如下:n nCREATE procedure sp_name CREATE procedure sp_name(过程参数(过程参数1 1,过程,过程参数参数22)begin begin 过程体过程体 end end Mysql入门很简单 田春艳 存储过程和函数例如例如mysqlDELIMITER /mysqlCREATEPROCEDUREproc1(OUTsint)BEGINSELECTCOUNT(*)INTOsFROM student;E
4、NDmysqlDELIMITER;Mysql入门很简单 田春艳 存储过程和函数注意事项注意事项n nDELIMITER /DELIMITER /和和 DELIMITER DELIMITER ;MySQL MySQL默认以默认以“;”“;”为一个命令的结束为一个命令的结束n n参数参数n nCREATE PROCEDURE(IN|OUT|INOUT CREATE PROCEDURE(IN|OUT|INOUT 参数名参数名数据类数据类形形.).)n nININ输入参数输入参数:表示该参数的值必须在调用存储过程时指定,表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默
5、认值在存储过程中修改该参数的值不能被返回,为默认值n nOUTOUT输出参数输出参数:该值可在存储过程内部被改变,并可返回该值可在存储过程内部被改变,并可返回n nINOUTINOUT输入输出参数输入输出参数:调用时指定,并且可被改变和返回调用时指定,并且可被改变和返回n n过程体的开始与结束使用过程体的开始与结束使用BEGINBEGIN与与ENDEND进行标识。进行标识。Mysql入门很简单 田春艳 存储过程和函数创建存储函数创建存储函数n nMySQL中,创建存储函数的基本形式如下:n nCREATE function sp_name(函数的参数)RETURNS type characte
6、ristic.routine_body Mysql入门很简单 田春艳 存储过程和函数例如例如n nDelimiter/Create function t_f(s int)returns char(20)bengin return(select sname from student where sno=s);end/n ndelimiter;Mysql入门很简单 田春艳 存储过程和函数存储过程和函数的区别存储过程和函数的区别n n关键字 n nPROCEDUREPROCEDURE、function functionn n参数上 n n存储过程可以的参数分为存储过程可以的参数分为IN|OUT|IN
7、OUT IN|OUT|INOUT n n存储函数没有分类存储函数没有分类n n返回值上n n存储函数是有返回值的存储函数是有返回值的 而而PROCEDUREPROCEDURE是通过是通过参数返回的参数返回的 Mysql入门很简单 田春艳 存储过程和函数内容内容n n创建存储过程和函数定义n n变量的定义赋值变量的定义赋值n n定义条件和处理程序n n游标的使用n n流程控制的使用n n修改存储过程和函数n n删除存储过程和函数 Mysql入门很简单 田春艳 存储过程和函数变量的使用变量的使用n n存储过程和函数中可以定义和使用变量。用户可以使用DECLARE关键字来定义变量。然后可以为变量赋值
8、。这些变量的作用范围是BEGINEND程序段中。本小节将讲解如何定义变量和为变量赋值。n n1定义变量n n2为变量赋值 Mysql入门很简单 田春艳 存储过程和函数定义变量定义变量n nDECLARE var_name,.type DEFAULT value n n如如declare a,b,c int default 0declare a,b,c int default 0n n其中,其中,DECLARE DECLARE关键字是用来声明变量的;关键字是用来声明变量的;var_namevar_name参数是变量的名称,这里可以同时定义参数是变量的名称,这里可以同时定义多个变量;多个变量;ty
9、petype参数用来指定变量的类型;参数用来指定变量的类型;DEFAULT valueDEFAULT value子句将变量默认值设置为子句将变量默认值设置为valuevalue,没有使用没有使用DEFAULTDEFAULT子句时,默认值为子句时,默认值为NULLNULL。Mysql入门很简单 田春艳 存储过程和函数为变量赋值(为变量赋值(1)n n使用SET关键字来为变量赋值。基本语法如下:n nSET var_name=expr,var_name=expr.SET var_name=expr,var_name=expr.n n如:如:Set a=20,b=40,c=50Set a=20,b=
10、40,c=50n n一个一个SETSET语句可以同时为多个变量赋值,各个变量的语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。赋值语句之间用逗号隔开。Mysql入门很简单 田春艳 存储过程和函数为变量赋值(为变量赋值(2)n n使用SELECTINTO语句为变量赋值。其基本语法如下:n nSELECT col_name,INTO var_name,FROM table_name WEHRE condition n n其中,其中,col_namecol_name参数表示查询的字段名称;参数表示查询的字段名称;var_namevar_name参数是变量的名称;参数是变量的名称;tab
11、le_nametable_name参数指表的参数指表的名称;名称;conditioncondition参数指查询条件。参数指查询条件。n nSELECT d_id INTO my_sql FROM employee SELECT d_id INTO my_sql FROM employee WEHRE id=2;WEHRE id=2;Mysql入门很简单 田春艳 存储过程和函数使用使用set定义变量定义变量n nSet a=3;n n会话变量会话变量 对当前客户端有效对当前客户端有效n nSet global 变量名n n全局变量全局变量 对所有客户端生效对所有客户端生效 Mysql入门很简单
12、 田春艳 存储过程和函数内容内容n n创建存储过程和函数定义n n变量的定义赋值n n定义条件和处理程序定义条件和处理程序n n游标的使用n n流程控制的使用n n修改存储过程和函数n n删除存储过程和函数 Mysql入门很简单 田春艳 存储过程和函数定义条件和处理程序定义条件和处理程序n n定义条件和处理程序是事先定义程序执行过程中可能遇到的问题。并且可以在处理程序中定义解决这些问题的办法。这种方式可以提前预测可能出现的问题,并提出解决办法。这样可以增强程序处理问题的能力,避免程序异常停止。n n1定义条件n n2定义处理程序 Mysql入门很简单 田春艳 存储过程和函数定义条件定义条件n
13、nMySQL中可以使用DECLARE关键字来定义条件。其基本语法如下:n nDECLARE condition_name CONDITION FOR condition_value n ncondition_value:n n SQLSTATE VALUE sqlstate_value|mysql_error_code Mysql入门很简单 田春艳 存储过程和函数n n/方法一:使用sqlstate_value n nDECLARE can_not_find CONDITION FOR SQLSTATE 42S02;n n/方法二:使用mysql_error_code n nDECLARE c
14、an_not_find CONDITION FOR 1146;Mysql入门很简单 田春艳 存储过程和函数定义处理程序定义处理程序n nDECLARE handler_type HANDLER for condition_value,.sp_statement n nhandler_type:n nCONTINUE|EXIT|UNDO CONTINUE|EXIT|UNDO Mysql入门很简单 田春艳 存储过程和函数n ncondition_value参数指明错误类型,该参数有6个取值。n nsqlstate_valuesqlstate_value和和mysql_error_codemysql
15、_error_code与条件定义中的是同与条件定义中的是同一个意思。一个意思。n ncondition_namecondition_name是是DECLAREDECLARE定义的条件名称定义的条件名称n nSQLWARNINGSQLWARNING表示所有以表示所有以0101开头的开头的sqlstate_valuesqlstate_value值。值。n nNOT FOUNDNOT FOUND表示所有以表示所有以0202开头的开头的sqlstate_valuesqlstate_value值。值。n nSQLEXCEPTIONSQLEXCEPTION表示所有没有被表示所有没有被SQLWARNINGS
16、QLWARNING或或NOT FOUNDNOT FOUND捕获的捕获的sqlstate_valuesqlstate_value值。值。Mysql入门很简单 田春艳 存储过程和函数n/方法一:捕获sqlstate_value DECLARE CONTINUE HANDLER FOR SQLSTATE 42S02SET info=CAN NOT FIND;n/方法二:捕获mysql_error_code DECLARE CONTINUE HANDLER FOR 1146 SET info=CAN NOT FIND;n/方法三:先定义条件,然后调用 DECLARE can_not_find COND
17、ITION FOR 1146;DECLARE CONTINUE HANDLER FOR can_not_find SET info=CAN NOT FIND;Mysql入门很简单 田春艳 存储过程和函数n/方法四:使用SQLWARNING DECLARE EXIT HANDLER FOR SQLWARNING SET info=ERROR;n/方法五:使用NOT FOUND DECLARE EXIT HANDLER FOR NOT FOUND SET info=CAN NOT FIND;n/方法六:使用SQLEXCEPTION DECLARE EXIT HANDLER FOR SQLEXCEP
18、TION SET info=ERROR;Mysql入门很简单 田春艳 存储过程和函数内容内容n n创建存储过程和函数定义n n变量的定义赋值n n定义条件和处理程序n n游标的使用游标的使用n n流程控制的使用n n修改存储过程和函数n n删除存储过程和函数 Mysql入门很简单 田春艳 存储过程和函数游标的使用游标的使用n n查询语句可能查询出多条记录,在存储过程和存储函数中使用游标来逐条读取查询结果集中的记录。游标的使用包括声明游标、打开游标、使用游标和关闭游标。游标必须声明在处理程序之前,并且声明在变量和条件之后。n n1 1声明游标声明游标n n2 2打开游标打开游标n n3 3使用游
19、标使用游标n n4 4关闭游标关闭游标 Mysql入门很简单 田春艳 存储过程和函数声明游标(声明游标(1)n nMySQL中使用DECLARE关键字来声明游标。其语法的基本形式如下:n nDECLARE cursor_name CURSOR FOR select_statement;Mysql入门很简单 田春艳 存储过程和函数声明游标(声明游标(2)n n下面声明一个名为cur_employee的游标。代码如下:n nDECLARE cur_employee CURSOR FOR SELECT DECLARE cur_employee CURSOR FOR SELECT name,age F
20、ROM employee;name,age FROM employee;n n上面的示例中,游标的名称为cur_employee;SELECT语句部分是从employee表中查询出name和age字段的值。Mysql入门很简单 田春艳 存储过程和函数打开游标打开游标n nMySQL中使用OPEN关键字来打开游标。其语法的基本形式如下:n nOPEN cursor_name;OPEN cursor_name;n n其中,其中,cursor_namecursor_name参数表示游标的名称。参数表示游标的名称。n n例如:下面打开一个名为cur_employee的游标,代码如下:n nOPEN c
21、ur_employee;OPEN cur_employee;Mysql入门很简单 田春艳 存储过程和函数使用游标(使用游标(1)n nMySQL中使用FETCH关键字来使用游标。其语法的基本形式如下:n nFETCH cur_employee INTO var_name,var_name;n n其中,cursor_name参数表示游标的名称;var_name参数表示将游标中的SELECT语句查询出来的信息存入该参数中。var_name必须在声明游标之前就定义好。Mysql入门很简单 田春艳 存储过程和函数使用游标(使用游标(2)n n下面使用一个名为cur_employee的游标。将查询出来的
22、数据存入emp_name和emp_age这两个变量中,代码如下:n nFETCH cur_employee INTO emp_name,emp_age;FETCH cur_employee INTO emp_name,emp_age;n n上面的示例中,将游标上面的示例中,将游标cur_employeecur_employee中中SELECTSELECT语句语句查询出来的信息存入查询出来的信息存入emp_nameemp_name和和emp_ageemp_age中。中。emp_nameemp_name和和emp_ageemp_age必须在前面已经定义。必须在前面已经定义。Mysql入门很简单 田
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mysql 课件 第十四 存储 过程 函数
限制150内