我不理解存储函数和视图之间的区别。 在SELECT语句中使用视图将执行查询并返回结果,但是存储函数也会做同样的事情,对吗?那么它们有什么区别呢?我什么时候应该使用视图,什么时候使用存储函数?
我不理解存储函数和视图之间的区别。 在SELECT语句中使用视图将执行查询并返回结果,但是存储函数也会做同样的事情,对吗?那么它们有什么区别呢?我什么时候应该使用视图,什么时候使用存储函数?
视图:
视图是一个虚拟的表
,它并不存在于物理上。相反,它是通过查询连接一个或多个表
创建的。视图返回一个表
。
存储过程:存储过程是一组Transact-SQL
语句编译成单个执行计划。
存储过程返回输出参数
,返回代码
(始终为整数值),对于存储过程中包含的任何SELECT
语句或由存储过程调用的任何其他存储过程,都会返回一个结果集,以及可以在存储过程之外引用的全局游标。
存储过程的主要优点是预编译执行
、减少客户端/服务器流量
、有效重用代码
、编程抽象
和增强的安全控制
。
更新:
存储函数是一个命名的PL/SQL块,类似于一个过程。过程和函数的主要区别在于,函数必须始终返回一个值,但过程可能返回也可能不返回值。 1)返回类型:头部定义了函数的返回类型。返回数据类型可以是任何Oracle数据类型,如varchar、number等。 2)执行和异常部分都应返回与头部部分定义的数据类型相同的值。
在大多数数据库中,您可以使用存储函数返回与视图相同的数据。
对我来说,区别在于函数是执行的,而视图是选择的。
视图将像表格一样行事。
视图返回一个特定的预定义语句,作为一个结果集。
函数返回一个单一值或一个结果集。然而,这可能因不同类型的数据库而异。
几种数据库实现还有存储过程,其结果可以是单个返回值、结果集或多个结果集。
简单入手(请开始阅读有关SQL的书籍):视图看起来像表格,因此您可以在结果上过滤,并且过滤器将有效地成为视图执行的一部分,或者进行连接。存储过程不允许这样做,但具有更多的逻辑。其余内容详见文档。
根据我的经验,我向您分享我的知识:
注意:视图是用于从表中选择数据的SELECT
语句(带/不带JOIN
),如果我们再次从VIEWS
运行SELECT
语句,则提供较慢的结果,因为内部操作如下(SELECT * FROM ( SELECT * FROM TargetTable )
)
因此,最好使用存储函数
函数是计算值,不能对SQL Server进行永久环境更改(即不允许INSERT或UPDATE语句)。
如果函数返回标量值,则可以在SQL语句中内联使用该函数,如果函数返回结果集,则可以加入该函数。
此外,请参考以下性能比较:SQL-Server 性能:存储过程和视图哪个更快?
存储过程
比视图
更快,我错了吗?谢谢您的时间。 - Elias Hossain