学习啦>生活课堂>生活小常识>

存储过程和自定义函数的区别

时间: 称红1024 分享

  存储过程和自定义函数的区别在哪里呢?下面是学习啦小编给大家整理的存储过程和自定义函数的区别,供大家参阅!

  存储过程和自定义函数的区别

  1)存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程。

  自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作。

  2)存储过程,可以使用非确定函数。

  自定义函数,不允许在用户定义函数主体中内置非确定函数。

  3)存储过程,主要是返回一个int状态结果,也可返回记录集。

  自定义函数,可以返回表变量。

  关于这个,很容易糊涂。存储过程,可以使用这样的形式来返回N多的结果:

  create procedure sp1

  as

  begin

  select name, fid_fk from table_1

  print '111'

  select testname ,fid from table_2

  end

  create procedure sp1 as begin select name, fid_fk from table_1 print '111' select testname ,fid from table_2 end

  [表1]

  而这个结果,只能以两种形式被使用:insert into table_3(name, fid_fk) exec sp1; 或者 EXEC sp1.

  不过,对于自定义函数,它必须指定定义为返回值为table类型的数据@t,并且在代码中显式的向该table @t中insert;或者,只是制定返回值为table类型,不指定return 的对象变量,直接return 该表。即:

  create function fn1()

  returns table

  as

  return select fid, testname from table_2

  create function fn1() returns table as return select fid, testname from table_2

  [表2]

  或者

  create function fn1()

  returns @v table

  (fid int primary key not null,

  testname nchar(10))

  as

  begin

  insert into @v select fid,testname from table_2

  end

  create function fn1() returns @v table (fid int primary key not null, testname nchar(10)) as begin insert into @v select fid,testname from table_2 end

  [表3]

  在这个方面,最能够看出存储过程和自定义函数的区别:前者是一系列功能的集合,可以返回int值,或者返回查询的结果集合,但是只是作为一系列功能的副产品;而后者,就是为了返回值而创建的。在【附录】中详细说明自定义函数的使用。

  4)存储过程,其返回值不能被直接引用;而是必须被使用为exec sp1或者 insert into table 的形式使用。

  自定义函数,其返回值可以被直接引用。

  5)存储过程,用 EXECUTE 语句执行。

  自定义函数,在查询语句中调用。

  【附录】最后补充一下。

  我ft,破csdn,整个格式都不会,不知道干嘛的。不过还是言归正传。

  一般说来,自定义函数就有这三个用处:

  1,如上[表2],返回一个in-line table value;

  2,如上[表3],返回一个multi statement table value;

  3,仅仅返回一个任意的变量,比如:

  Create Function CubicVolume

  (@CubeLength decimal(4,1),@CubeWidth decimal(4,1),@CubeHeight decimal(4,1) )

  Returns decimal(12,3)

  As

  Begin

  Return (@CubeLength * @CubeWidth * @CubeHeight)

  End

  2.

  SQL中的存储过程,函数,视图有什么区别?

  存储过程是预先写好并编译好的SQL程序

  函数预先写好的代码片断,有系统函数,也有自定义函数

  视图是预先建立的查询语句,用起来就像使用表一样了

  存储过程需要单独执行,函数可以随处调用,视图是一种直观的表现方式~

  存储过程优点和缺点

  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

  优点

  ①重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。

  ②提高性能。存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。

  ③减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。

  ④安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

  缺点

  1:调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。

  2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

  3:重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

  4: 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

存储过程和自定义函数的区别相关文章:

1.自动输出SQLServer存储过程依赖列表到EXCEL文件

2.linux的mysqldump命令

3630476