存储过程和存储函数都是MysqL5.0版本后开始的过程式数据库对象,作为数据库存储的重要功能,可以有效提高数据库的处理速度、数据库编程的灵活性。
二、存储过程存储过程是一组为了完成某特定功能的SQL语句集,这组语句集经编译后存储在数据库中,用户只需通过指定存储过程的名字并给定参数 (如果该存储过程带有参数),即可随时调用并执行它,而不必通过重新编译。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。
示例一:
创建一个存储过程,用于实现给定表customers中一个cust_ID即可修改表customers中该客户的性别为一个指定性别:
delimiter $$create procedure sp_update_sex(in cID int,in csex char(1))//传入参数需要用in来说明,传出参数用out来说明begin update customers set cust_sex=csex where cust_ID=cID;end $$
在MySQL命令行客户端输入如下SQL语句对存储过程sp_update_sex进行调用:
call sp_update_sex(1,'M');//通过call关键字进行调用,并传入对应的参数
示例二:
在存储过程体中(begin…end)可以使用各种SQL语句与过程式语句的组合,来封装数据库应用中复杂的业务逻辑和处理规则,以实现数据库应用的灵活编程。
首先创建一张测试表:
create table customers(cust_ID int not null auto_increment,cust_name char(50) not null,cust_sex char(1) not null default 'M',cust_address char(50) null,cust_contact char(50) null,primary key(cust_ID))engine = innodb;
插入一些测试数据:
insert customers values(1,’张三’,’F’,’北京市’,’朝阳区’);insert customers values(2,’李小明渣渣’,’M’,’广东省’,’广州市’);
创建存储过程sp_sumofrow,用于计算表customers中数据行的行数:
delimiter $$--修改结束符create procedure sp_sumofrow(out rows int)begindeclare cID int;--声明局部变量declare found boolean default true;declare cur_cID cursor for--声明游标,局部变量要在游标之前定义,句柄要在游标之后定义,否则系统会出现错误信息。即局部变量-游标-句柄select cust_ID from customers;declare continue handler for not found--声明句柄,条件处理set found=false;set rows=0;open cur_cID;--打开游标fetch cur_cID into cID ;--读取数据while found do--循环语句set rows=rows+1;fetch cur_cID into cID;end while;close cur_cID;--关闭游标end $$
在MySQL命令行客户端输入如下SQL语句对存储过程sp_sumofrow进行调用:
call sp_sumofrow(@rows);
查看调用存储过程sp_sumofrow后的结果:
select @rows;--注意@与rows之间不能有空格
删除存储过程:
drop procedure sp_update_sex;
三、存储函数 存储函数是与存储过程十分相似的过程式数据库对象,与存储过程的区别主要如下:
1、不需要使用call语句,即可直接对存储函数进行调用
2、存储函数必须包含一条return语句,有且只有一个返回值,而存储过程不能有返回值。
3、函数只能有输入参数(不能有输出参数),而且输入参数不能带in,而存储过程可以有多个in,out,inout参数。
4、存储过程可以调用存储函数。但函数不能调用存储过程。
5、存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部分来调用。
创建存储函数:
delimiter $$create function fn_search(cID int) returns char(2) deterministic //[dɪˌtɜ:mɪ'nɪstɪk]确定性的begin declare sex char(2); select cust_sex into sex from customers where cust_ID=cID; if sex is null then return(select'没有该客户'); else if sex='F' then return(select '女'); else return(select '男'); end if; end if;end $$
调用存储函数:
select fn_search(2);
如果想查看数据库中存在哪些存储函数,可以使用:
show function status;
如果想要查看数据库中某个具体的存储函数的信息,可以使用:
show create function fn_search;--fn_search是我们刚刚创建的存储函数的名称
删除存储函数:
drop function if exists fn_search;
总结 以上是内存溢出为你收集整理的Mysql之存储过程与存储函数全部内容,希望文章能够帮你解决Mysql之存储过程与存储函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)