【1】什么是存储过程(Stored Procedure) 通过前面章节的学习,我们已经知道SQL是一种非常便利的语言。从数据库抽取数据,或者对特定的数据集中更新时,都能通过简洁直观的代码实现。 但是这个所谓的“简洁”也是有限制,SQL基本是一个命令实现一个处理,是所谓的非程序语言。 在不能编写流程的情况下,所有的处理只能通过一个个命令来实现。当然,通过使用连接及子查询,即使使用SQL的单一命令也能实现一些高级的处理,但是,其局限性是显而易见的。例如,在SQL中就很难实现针对不同条件进行不同的处理以及循环等功能。 这个时候就出现了存储过程这个概念,简单地说,存储过程就是数据库中保存(Stored)的一系列SQL命令(Procedure)的集合。也可以将其看作相互之间有关系的SQL命令组织在一起形成的一个小程序。 【2】存储过程的优点 1) 提高执行性能。存储过程执行效率之所高,在于普通的SQL语句,每次都会对语法分析,编译,执行,而存储过程只是在第一次执行语法分析,编译,执行,以后都是对结果进行调用。 2) 可减轻网络负担。使用存储过程,复杂的数据库操作也可以在数据库服务器中完成。只需要从客户端(或应用程序)传递给数据库必要的参数就行,比起需要多次传递SQL命令本身,这大大减轻了网络负担。 3) 可将数据库的处理黑匣子化。应用程序中完全不用考虑存储过程的内部详细处理,只需要知道调用哪个存储过程就可以了
【3】展示存储过程:
-- 定义一个没有返回值 存储过程 -- 实现:模糊查询操作: select * from emp where ename like '%A%'; create procedure mypro01(name varchar(10)) begin if name is null or name = "" then select * from emp; else select * from emp where ename like concat('%',name,'%'); end if; end; -- 删除存储过程: drop procedure mypro01; -- 调用存储过程: call mypro01(null); call mypro01('R'); -- 定义一个 有返回值的存储过程: -- 实现:模糊查询操作: -- in 参数前面的in可以省略不写 -- found_rows()mysql中定义的一个函数,作用返回查询结果的条数 create procedure mypro02(in name varchar(10),out num int(3)) begin if name is null or name = "" then select * from emp; else select * from emp where ename like concat('%',name,'%'); end if; select found_rows() into num; end; -- -- 调用存储过程: call mypro02(null,@num); select @num; call mypro02('R',@aaa); select @aaa;