【发布时间】:2011-12-02 07:24:02
【问题描述】:
我没有弄清楚存储函数和视图之间的区别。 在 SELECT 中使用 Views 将执行查询并返回结果,但是 Stored Functions 做同样的事情,不是吗?那么区别是什么呢?我什么时候使用Views,什么时候使用Stored Functions?
【问题讨论】:
标签: sql sql-server oracle
我没有弄清楚存储函数和视图之间的区别。 在 SELECT 中使用 Views 将执行查询并返回结果,但是 Stored Functions 做同样的事情,不是吗?那么区别是什么呢?我什么时候使用Views,什么时候使用Stored Functions?
【问题讨论】:
标签: sql sql-server oracle
查看:
视图是虚拟的table。它确实不实际存在。相反,它是由查询joining 一个或多个tables 创建的。查看returns a table。
存储过程:存储过程是一组Transact-SQL 语句编译成一个执行计划。
存储过程returns Output parameters,return codes(始终为整数值),
存储过程中包含的每个SELECT 语句的结果集或存储过程调用的任何其他存储过程,一个可以在存储过程之外引用的全局游标。
存储过程的主要优点强>是Precompiled execution、reduced client/server traffic、efficient reuse of code、programming abstraction和enhanced security controls。
更新:
存储函数是一个命名的 PL/SQL 块,它类似于一个过程。过程和函数之间的主要区别在于,函数必须始终返回一个值,但过程可能会也可能不会返回值。 1)返回类型:标题部分定义了函数的返回类型。返回数据类型可以是任何 oracle 数据类型,如 varchar、number 等。 2) 执行部分和异常部分都应该返回一个在标题部分中定义的数据类型的值
【讨论】:
您可以让存储函数返回与大多数数据库中的视图相同的数据。
对我来说区别是执行一个函数,从中选择一个视图。
视图将表现为表格。
【讨论】:
视图将特定的预定义语句作为一个结果集返回。
函数返回单个值或单个结果集。但是,这可能因不同类型的数据库而异。
几个 db 实现也有存储过程,其中结果可以是单个返回值、一个结果集或多个结果集。
【讨论】:
变得简单(请开始阅读有关 SQL 的书):视图看起来像一个表,因此您可以过滤结果,过滤器将有效地成为视图执行或连接的一部分。 SP不允许这样做,但更多的逻辑。其余的……在文档中。
【讨论】:
这些永远无法比较,它们完全不同 接近。
一个视图是一个query的output,对表格做了一个virtual image,不接受输入参数。
主要区别在于存储过程可以更改您的数据,其中 作为一个视图只返回它,我相信从性能的角度来看 看来,存储过程更好,因为它缓存了执行计划和 结果会跑得更快。
storedprocedure/function 是一组预先执行的 sql 语句,它接受参数。它减少网络流量,提供更快的性能等。
编程语言中的 SQL 函数是用于封装经常执行的逻辑的子例程。这些会降低性能。
检查这些SQL View、SQL Stored Procedures 和SQL User-Defined Functions
我的意见是 SQL 存储过程(存储函数)更好用,因为它还提供了对结果集的自定义操作。
【讨论】:
根据我的经验,我向您分享我的知识:
注意:Views 是一个 SELECT 语句(带/不带 JOIN),用于从表中选择数据的表,如果我们再次从 VIEWS 运行 SELECT 语句,由于内部操作提供较慢的结果为(SELECT * FROM ( SELECT * FROM TargetTable ))
所以,最好使用存储函数
函数是计算值,不能执行永久环境更改为 SQL Server(即不允许 INSERT 或 UPDATE 语句)。
如果函数返回标量值,则可以在 SQL 语句中内联使用,如果返回结果集,则可以连接。
另请参阅此处进行性能比较:SQL-Server Performance: What is faster, a stored procedure or a view?
【讨论】:
stored procedure 比 View 快,我错了吗?感谢您的宝贵时间,