DB中的存储函数和视图有什么区别?

时间:2011-12-02 07:24:03

标签: sql sql-server oracle

我没有理解存储函数视图之间的区别。 在SELECT中使用视图将执行查询并返回结果,但存储函数执行相同的操作,不是吗?那么区别是什么呢?当我使用观看次数存储函数

6 个答案:

答案 0 :(得分:5)

查看: 视图是虚拟table。它实际存在。相反,它是由查询joining创建的一个或多个tables。查看returns a table

存储过程:存储过程是一组编译成单个执行计划的Transact-SQL语句。
存储过程returns Output parametersreturn codes(始终为整数值),  存储过程中包含的每个SELECT语句或存储过程调用的任何其他存储过程的结果集,可以在存储过程外引用的全局游标。
存储过程的主要优势包括Precompiled executionreduced client/server trafficefficient reuse of codeprogramming abstractionenhanced security controls

<强>更新

存储函数是一个命名的PL / SQL块,类似于一个过程。过程和函数之间的主要区别在于,函数必须始终返回值,但过程可能会也可能不会返回值。  1)返回类型:标题部分定义函数的返回类型。返回数据类型可以是任何oracle数据类型,如varchar,number等。  2)执行和异常部分都应返回一个值,该值是标题部分

中定义的数据类型

答案 1 :(得分:1)

您可以让存储的函数返回大多数数据库中视图的相同数据。

我的区别在于执行了一个函数,并从中选择了一个视图。

视图将表现为表格。

答案 2 :(得分:0)

视图将特定的预定义语句作为一个结果集返回。

函数返回单个值或单个结果集。然而,这可能与不同类型的数据库不同。

多个db实现也有存储过程,其结果可以是单个返回值,结果集或多个结果集。

答案 3 :(得分:0)

变得简单(请开始阅读有关SQL的书):视图看起来像一个表,因此您可以对结果进行过滤,过滤器将有效地成为视图执行的一部分,或者进行连接。 SP不允许这样做,但逻辑更多。其余的......在文档中。

答案 4 :(得分:0)

  

这些永远不可能比较,这些完全不同   方法

视图是output的{​​{1}},并且会生成表格的query,并且不接受输入参数。

  

主要区别在于存储过程可以改变您的数据,在哪里   作为一个观点只返回它,我相信从性能点   视图,存储过程更好,因为它缓存执行计划和   结果会跑得更快。

storedprocedure / function是一组预先执行的sql语句,它接受参数。它可以减少网络流量,提供更快的性能等。

编程语言中的SQL函数是用于封装频繁执行的逻辑的子例程。这些有点放慢了表现。

检查这些SQL ViewSQL Stored ProceduresSQL User-Defined Functions

我的意见是SQL存储过程(存储函数)使用起来要好得多,因为它也对结果集提供自定义操作。

答案 5 :(得分:0)

根据我的经验,我正在向你分享我的知识:

  • 不要使用视图
  • 最好使用存储过程(它是编译的sql语句),您可以根据需要使用参数化过程。
  • 存储函数是编译的sql语句的集合,它更快。

注意:对于从表中选择数据并且我们再次从SELECT运行JOIN语句的表,视图是SELECT语句(有/无VIEWS)由于内部操作为(SELECT * FROM ( SELECT * FROM TargetTable )

,因此结果较慢

因此,最好使用存储函数

更新

函数是计算值,不能对SQL Server执行永久性环境更改(即不允许INSERT或UPDATE语句)。

如果函数返回标量值,则可以在SQL语句中内联使用;如果返回结果集,则可以将其连接在一起。

另请参阅此处以进行效果比较:SQL-Server Performance: What is faster, a stored procedure or a view?