在Oracle SQL语句中使用分号

5
免责声明:我刚开始在一份新的合同上工作,这迫使我从MSSQL转向Oracle。因此,我完全是Oracle的新手,并可能带来许多不良的MSSQL实践。好了,问题来了... 根据这个主题中的一个答案,分号是不好的,应该避免使用。在SQL Developer中,我亲身体验到了这一点,在花费数小时尝试弄清楚为什么我的查询运行得如此缓慢之后,我意识到了这一点。从一个复杂的查询中删除分号后,它在几秒钟内完成了(与在删除分号之前放弃它后的几分钟相比)。这种行为让我吃惊,而谷歌搜索并没有找到很多关于何时以及为什么应该或不应该在我的SQL语句中使用分号的信息。有人能用简短的解释澄清一下吗? 如果您有任何在线资源的链接,可以帮助那些从MSSQL转移到Oracle的开发人员,那么我将不胜感激! 谢谢!

顺便提一下,在MSSQL服务器中也不需要分号。 - HLGEM
1
@HLGEM:但你也应该开始在MSSQL中使用它们:https://sqlblog.org/2009/09/03/ladies-and-gentlemen-start-your-semi-colons - user330315
4个回答

16

问题不在于分号。重新运行相同的查询意味着这些行已经被缓存,因此您可以更快地获取它们。


3
封号(semi-colon)是一种语句分隔符。在SQL*Plus中,如果您执行以下命令: update table_a set col_1=2; / 遇到封号时,更新语句将自动执行。然后斜杠(/)会运行缓冲区中的当前语句(也就是重新运行刚刚执行的语句)。 如果不加斜杠,并且将SQL语句用空行分隔开,这些语句将永远不会被执行而直接被丢弃。虽然这样很快 :) 不同的客户端对于执行语句有不同的方式。SQL Developer的ctrl-return不应该考虑SQL语句末尾的封号。 - Gary Myers

5

我有5年以上的MS SQL经验和4年以上的Oracle开发经验。

我知道你可能会讨厌很多Oracle的特性,尤其是在SQL方面,但是放轻松。Oracle是一个非常强大的DBMS。虽然从很多角度来看,我更喜欢MSSQL而不是Oracle,但这是另一个话题。

至于你的问题:

分号只是语句分隔符。

SQL Developer使用Java和OCI,所以你可能会遇到不同的问题(我只是猜测可能会出现一些问题)。

如果你感觉某些东西运行不正常,我建议你将查询提取出来,使用SQLPLUS而不是可视化查询工具来运行它,因为这样会给你正确的感觉。

祝你在Oracle开发中好运。

请访问SQL*Plus FAQ


2

这是一本非常有帮助的书,可以极大地帮助你学习IT技术。

《SQL in a Nutshell》作者是Kevin和Daniel Kline,书中介绍了Oracle和SQL Server的语法,如果你已经掌握了t-SQL的写作方法,那么你可以轻松地了解如何将其转换为Oracle语法。


1

我在PowerBuilder、Java、.NET和TOAD等平台上担任Oracle开发人员超过十年了,这听起来很奇怪。

我建议使用explain plan查找问题所在,并确保数据库健康,具备适当的统计数据和索引。

我还记得在早期版本的Oracle中,使用基于规则的优化会导致这种性能问题,但是随着成本优化和统计信息的出现,这些问题已成为过去式。


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