Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wann muss ich in Oracle SQL ein Semikolon und wann einen Schrägstrich verwenden?

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.