面试回答:
存储过程和函数都是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
当然,他们也有一定的区别:
首先就是他们的标识符不同,函数使用的是function,而存储过程使用的是procedure;
函数可以返回单个值或者表对象,而存储过程则没有返回值;
相对而言,函数的限制较多;
函数实现的功能针对性较强,而存储过程实现的功能则要复杂一点;
函数的参数只能是in类型,而存储过程的参数则可以是in、out、inout三种类型;
他们的调用方式也有所不同,函数使用select调用,而存储过程使用call调用。
相同点
● 存储过程和函数都是为了可重复的执行操作数据库的 SQL 语句的集合。
● 存储过程和函数都是一次编译后缓存起来,下次使用就直接命中已经编译好的 sql 语句,减少网络交互提高了效率。
不同点
● 标识符不同,函数的标识符是 function,存储过程是 procedure。
● 函数返回单个值或者表对象,而存储过程没有返回值,但是可以通过OUT参数返回多个值。
● 函数限制比较多,比如不能用临时表,只能用表变量,一些函数都不可用等,而存储过程的限制相对就比较少。
● 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强
● 函数的参数只能是 IN 类型,存储过程的参数可以是IN OUT INOUT三种类型。
● 存储函数使用 select 调用,存储过程需要使用 call 调用。