Ich weiß, dass dies ein alter Thread ist, aber ich bin gerade darüber gestolpert und habe das Gefühl, dass dies nicht vollständig erklärt wurde.
Es gibt einen großen Unterschied in SQL*Plus zwischen der Bedeutung von /
und ein ;
weil sie anders funktionieren.
Der ;
beendet eine SQL-Anweisung, während /
führt alles aus, was sich im aktuellen "Puffer" befindet. Wenn Sie also einen ;
verwenden und ein /
die Anweisung wird tatsächlich zweimal ausgeführt.
Sie können das leicht mit einem /
sehen nach dem Ausführen einer Anweisung:
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:37:20 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With 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
In diesem Fall bemerkt man den Fehler tatsächlich.
Aber vorausgesetzt, es gibt ein SQL-Skript wie dieses:
drop table foo;
/
Und dies wird innerhalb von SQL*Plus ausgeführt, dann wird dies sehr verwirrend sein:
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:38:05 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and OLAP options
SQL> @drop
Table dropped.
drop table foo
*
ERROR at line 1:
ORA-00942: table or view does not exist
Der /
wird hauptsächlich benötigt, um Anweisungen auszuführen, die ;
eingebettet haben wie CREATE PROCEDURE
,CREATE FUNCTION
,CREATE PACKAGE
-Anweisungen und für alle BEGIN...END
Blöcke.