1、函数只能返回一个变量,而存储过程可以返回多个;
例如:函数可以嵌入sql中和存储过程中使用,但是存储过程需要让sql的query可以执行,将mysql_real_connect的最后一个参数设置为CLIENT_MULTI_STATEMENTS
2、函数的限制比较多,不能用临时表,只能用表变量,有些函数不能用,存储过程限制少;
3、存储过程处理的功能比较复杂,而函数实现的功能针对性强;
4、存储过程可以执行修改表的操作,但是函数不能执行一组修改全局数据库状态的操作;
5、存储过程可以返回参数,如记录集,函数只能返回值或者表对象。
例如:存储过程的参数有in,out,inout三种,函数只有in,存储过程声明时不需要返回类型,而函数需要描述返回类型,且函数中必须包含一个有效的return语句;
6、存储过程一般是作为独立部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,所以在查询中位于from关键字后面,sql语句中不可以含有存储过程。
扩展资料:
1、存储过程的基本语法:
(1)创建存储过程
create procedure sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
以上格式还可以简写成:
create proc sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
/*注:“sp_name”为需要创建的存储过程的名字,该名字不可以以阿拉伯数字开头*/
(2)调用存储过程
exec sp_name [参数名]
(3)删除存储过程
drop procedure sp_name
(4)其他常用命令
① show procedure status
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
② show create procedure sp_name
显示某一个mysql存储过程的详细信息
③ exec sp_helptext sp_name
显示你这个sp_name这个对象创建文本
2、存储过程和触发器的区别:
(1)触发器与存储过程可以说是非常相似,可以说是一种变种的存储过程,触发器和存储过程一样都是SQL语句集,通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。
(2)触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。
参考资料来源:百度百科 - 存储过程
参考资料来源:百度百科 - 函数(计算机函数)