存储过程 包 函数的区别,存储过程和函数的区别
一、函数和存储过程的区别
函数和存储过程对SQL SERVER来说有很大的区别:
1.在SQL SERVER2K以前,没有自定义函数UDF,只有系统函数。
2.无论系统函数和UDF,在系统启动是就进行编译并加载,所以UDF的效率比SP要高,SP只是在调用时才加载(扩展的存储过程除外)。
3.有些函数getdate,exec..都在UDF里不能用!
4.函数必须有返回值,SP则不一定。
5.函数可以包括在FROM子句中,SP则不可以。
6.在SQL SERVE2K中SP可以DEBUG,UDF不可以。用户定义函数
函数是由一个或多个 Transact-SQL语句组成的子程序,可用于封装代码以便重新使用。Microsoft® SQL Server™ 2000并不将用户限制在定义为 Transact-SQL语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。
可使用 CREATE FUNCTION语句创建、使用 ALTER FUNCTION语句修改、以及使用 DROP FUNCTION语句除去用户定义函数。每个完全合法的用户定义函数名(database_name.owner_name.function_name)必须唯一。
必须被授予 CREATE FUNCTION权限才能创建、修改或除去用户定义函数。不是所有者的用户在 Transact-SQL语句中使用某个函数之前,必须先给此用户授予该函数的适当权限。若要创建或更改在 CHECK约束、DEFAULT子句或计算列定义中引用用户定义函数的表,还必须具有函数的 REFERENCES权限。
在函数中,区别处理导致删除语句并且继续在诸如触发器或存储过程等模式中的下一语句的 Transact-SQL错误。在函数中,上述错误会导致停止执行函数。接下来该*作导致停止唤醒调用该函数的语句。
用户定义函数的类型
SQL Server 2000支持三种用户定义函数:
标量函数
内嵌表值函数
多语句表值函数
存储过程
存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL语句和可选控制流语句的预编译**,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用 SQL语句的目的来使用存储过程,它具有以下优点:
可以在单个存储过程中执行一系列 SQL语句。
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL语句快。存储过程可能单独完成一些内容,可以单独进行。
函数可以在试子中调用,比如可以进行一些计算等,不能单独执行。
二、存储过程和函数的区别
一、含义不同
1、存储过程:存储过程是 SQL语句和可选控制流语句的预编译**,以一个名称存储并作为一个单元处理。
2、函数:是由一个或多个 SQL语句组成的子程序,可用于封装代码以便重新使用。函数限制比较多,如不能用临时表,只能用表变量等
二、使用条件不同
1、存储过程:可以在单个存储过程中执行一系列 SQL语句。而且可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
2、函数:自定义函数诸多限制,有许多语句不能使用,许多功能不能实现。函数可以直接引用返回值,用表变量返回记录集。但是,用户定义函数不能用于执行一组修改全局数据库状态的*作。
三、执行方式不同
1、存储过程:存储过程可以返回参数,如记录集,函数只能返回值或者表对象。存储过程的参数有in,out,inout三种,存储过程声明时不需要返回类型。
2、函数:函数参数只有in,而函数需要描述返回类型,且函数中必须包含一个有效的return语句。
参考资料链接:百度百科-存储过程
参考资料链接:百度百科-函数
三、简述存储过程和函数的区别
过程是编制程序时定义的一个语句序列,用来完成某种指定的*作。过程说明是由过程首和分程序(说明部分和过程体)组成,过程定义如下:
过程定义:
procedure过程标识符形式参数表;分程序;
过程调用:
过程标识符(实际参数表);(*若没有参数,则一对圆括号间的内容(包括括号本身)可不要*)
例:
program proconcept(output);
type st=string[12];
var s:st;
procedure p(s1:st);
begin
write(s1);
end;
begin
s:='welcome you!';
p(s);
end.
函数是子程序的另一种形式,也是编制程序时定义的一个语句序列.与过程不同的是函数不以实现某种*作为目的,而仅是为了获得一个计算结果值.这个结果值终是通过函数名返回给调用者的,因此函数名具有值的类型.PASCAL语言规定一个函数只能求出一个简单值,所以确切地说函数名的类型只能是简单类型.函数的说明也是由函数首部和分程序(说明部分和函数体)组成,其定义语法如下:
函数定义:
function函数标识符形式参数表:函数类型标识符;分程序;
函数调用:
与标准函数的使用方法一样,例:
program fucconcept(output);
var x:integer;
function f(m:integer):integer;
begin
f:=sqr(m)
end;
begin
x:=f(5);
writeln('x=',x)
end.
四、mysql 存储过程和函数的区别
mysql存储过程和函数的区别
1、
存储过程实现的功能要复杂一点,函数实现的功能针对性比较强。
存储过程,功能强大,可以执行包括修改表等一系列数据库*作;
用户定义函数不能用于执行一组修改全局数据库状态的*作。
2、
对于存储过程来说可以返回参数,如记录集,函数只能返回值或者表对象。
函数只能返回一个变量;而存储过程可以返回多个;
存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类;
存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。
3、
存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
4、
存储过程一般是作为一个独立的部分来执行( EXECUTE语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用)。
由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。