在 Oracle SQL 语句中使用分号
Posted
技术标签:
【中文标题】在 Oracle SQL 语句中使用分号【英文标题】:Using Semicolons in Oracle SQL Statements 【发布时间】:2009-05-13 20:55:26 【问题描述】:免责声明:我刚开始签订一份新合同,这迫使我从 MSSQL 切换到 Oracle。所以我完全是 Oracle 的新手,可能会带来许多糟糕的 MSSQL 实践。好的,关于这个问题...
根据an answer in this thread,分号不好,应该避免。在花了几个小时试图弄清楚为什么我的查询在 SQL Developer 中运行得如此缓慢之后,我第一手意识到了这一点。从复杂查询的末尾删除分号后,它在几秒钟内完成(与我在几分钟后放弃它相比,这是删除分号之前的情况)。这种行为让我大吃一惊,Google 搜索并没有显示太多关于何时以及为什么我应该或不应该在我的 SQL 语句中使用分号的信息。任何人都可以通过简短的解释来解决这个问题吗?
如果您有任何在线资源链接,供从 MSSQL 迁移到 Oracle 的差劲开发人员使用,我将不胜感激!
谢谢!
【问题讨论】:
顺便说一句,您在 MSSQL 服务器中也不需要分号 @HLGEM:但您也应该开始在 MSSQL 中使用它们:sqlblog.com/blogs/aaron_bertrand/archive/2012/09/25/16567.aspx 【参考方案1】:不是分号。重新运行相同的查询意味着这些行已经被缓存,因此您可以更快地恢复它们。
【讨论】:
分号是语句分隔符。在 SQL*Plus 中,如果您确实 update table_a set col_1=2; / 遇到分号时会自动执行更新语句。然后斜杠将运行缓冲区中的当前语句(即重新运行刚刚执行的语句);如果没有斜线,并且 SQL 语句由空行分隔,这些语句将永远不会被执行并被简单地丢弃。不过那会非常快:) 不同的客户有不同的执行语句的方式。 SQL Developer 的 ctrl-return 不应该关心 SQL 末尾的分号【参考方案2】:我拥有 5 年以上的 MS SQL 经验和 4 年以上的 Oracle 开发经验。 我知道你会讨厌很多 Oracle 特性,尤其是 SQL,;) 但请放轻松。 Oracle 是一个非常强大的 DBMS。尽管从很多角度来看,我更喜欢 MSSQL 而不是 Oracle,但这是一个不同的话题。
至于你的问题:
分号只是一个语句分隔符。
SQL 开发人员正在使用 Java 和 OCI,因此您可能会遇到不同的问题(我只是猜测可能有问题)。
如果您觉得某些东西运行不正常,我建议您获取该查询并在 SQLPLUS 中运行它而不是 Visual Query Tools,因为它会给您正确的感觉。
祝 Oracle 开发顺利。
访问SQL*Plus FAQ。
【讨论】:
【参考方案3】:这是一本非常有帮助的书 Kevin 和 Daniel Kline 的 SQL 简述
这具有 Oracle 和 SQl 服务器的语法,因此如果您知道如何用 t-SQL 编写,您可以轻松了解如何将事物转换为 Oracle 语法。
【讨论】:
【参考方案4】:作为 PowerBuilder、Java、.NET 和 TOAD 的开发人员与 Oracle 合作了 10 多年,这听起来很奇怪。
我建议使用解释计划来查找正在发生的事情并确保数据库是健康的,具有适当的统计数据和索引。
从早期的 Oracle 版本中,我记得使用基于规则的优化可能会导致此类性能问题,但最近基于成本的优化和统计已使此类问题成为过去。
【讨论】:
以上是关于在 Oracle SQL 语句中使用分号的主要内容,如果未能解决你的问题,请参考以下文章
Oracle数据库的sqlplus可以直接执行SQL语句吗?