Oracle中与SQL Server的SET NOCOUNT ON等效的是什么?

7
Oracle中相当于SQL Server的SET NOCOUNT ON是什么?
根据SQL Server文档
SET NOCOUNT ON…停止返回作为结果集一部分的Transact-SQL语句或存储过程影响行数计数的消息…对于包含多个不返回实际数据的语句的存储过程,或包含Transact-SQL循环的过程,将SET NOCOUNT设置为ON可以提供显著的性能提升,因为网络流量大大降低。

在 SQL*plus 提示符下输入 "SET FEEDBACK OFF"。参考链接:http://ss64.com/ora/syntax-sqlplus-set.html - BigMike
2
@BigMike 这应该是一个带有链接的答案:http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12040.htm#i2698970 - Aaron Bertrand
2个回答

6

当在存储过程中使用set nocount on时,Oracle没有相应的等价物,因为这是不必要的(在存储过程或函数中)。

唯一类似的事情是像BigMike提到的那样使用set feedback off


我不熟悉SQL Server,但是阅读文档后,似乎如果我执行一个包含多个查询的脚本,它会返回类似于结果集(或类似数据结构)的东西,其中包含每个查询的结果和一个信息行,其中包含前一条指令所影响的行数。如果它确实是这样工作的,我可以理解为什么设置该选项可以提高性能。我的理解正确吗? - BigMike
1
@BigMike:我很少自己使用SQL Server,但这也是我的理解。此外,我认为它还会影响存储过程返回的结果集(但自从我不得不编写T-SQL以来已经过了很长时间)。 - user330315

4
在SQL*Plus提示符上输入SET FEEDBACK OFF
请参考此链接获取官方文档。

该文档建议该命令仅在SQL*plus提示符下执行语句时才有效。在SQL Server中,即使在非交互式场景中,SET NOCOUNT也会影响行为。根据MS文档的说法,“对于包含多个不返回实际数据的语句的存储过程,这可以提供显着的性能提升,因为网络流量大大减少。” SET FEEDBACK也是如此吗? - Daniel Renshaw
@DanielRenshaw 我从来没有看到设置 FEED ON 或 OFF 对性能产生影响。通常,SET FEED 和其他选项与报表生成有关(是的,你可以通过 SQL*Plus 得到漂亮的报表)。这与 MS Management Studio 有些不同。我真诚地怀疑,在存储过程中执行 SET NOCOUNT 并通过 jdbc 或 ADO 或其他方式调用它是否会缩短执行时间。 - BigMike
SET FLUSH有时可以提高SQLPlus性能,但它管理的是sqlplus应用程序的输出(格式化或未格式化)刷新。 - BigMike
这里是 SET NOCOUNT 的文档链接:http://msdn.microsoft.com/en-us/library/ms189837.aspx。很可能 Oracle 没有 SQL Server 中的 DONE_IN_PROC 消息的等效物。 - Daniel Renshaw
我认为这很不同。SQL*Plus编写的消息数量可以通过计算获取的行数来获得,而不是通过特定消息获得,但这只是我的猜测。禁用视频输出可能会导致性能提高,但仅因为它减少了可视化时间。 - BigMike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接