我知道这是一个老生常谈,但我只是偶然发现,我觉得这一点还没有得到完全解释。
在SQL*Plus中,/和一个;因为他们的工作方式不同。
这个;结束SQL语句,而/执行当前“缓冲区”中的任何内容。所以当你使用; 和 a /该语句实际上执行了两次。
您可以很容易地看到,使用/运行语句之后:SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:37:20 2012Copyright (c) 1982, 2010, Oracle.
All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning and OLAP options
SQL> drop table foo;Table dropped.SQL> /drop table foo *ERROR at line 1:ORA-00942: table or view does not exist
在这种情况下,人们实际上注意到了错误。
但是,假设有这样的SQL脚本:drop table foo;/
这是从SQL*Plus内部运行的,这将非常令人困惑:SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:38:05 2012Copyright (c) 1982, 2010, Oracle.
All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning and OLAP options
SQL> @dropTable dropped.drop table foo *ERROR at line 1:ORA-00942: table or view does not exist
这个/主要是为了运行嵌入了;就像CREATE PROCEDURE声明。