Welche Bedeutung hat ein Semikolon am Ende von SQL * Plus-Befehlen?

16

Einige Anweisungen wie create table, insert into etc setzen am Ende ein Semikolon:

CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn_demo NOT NULL
    ) ;

während andere mögen

set echo on
connect system/manager

Gehen Sie auch ohne Semikolon durch.

Was ist die Begründung dafür? Wie kann ich selbst entscheiden, wo das Semikolon platziert werden soll und wo nicht?

Laser
quelle
6
+1 Um die Sache noch unübersichtlicher zu machen, können Sie in der folgenden Zeile / anstelle des; in manchen Fällen.
bernd_k

Antworten:

15

Kommandos zur lokalen Instanz werden bei der Rückkehr ausgeführt. Mehrzeilige Befehle an den Server werden mit Semikolon ausgeführt

Spezielle Befehle, wie im SQL * Plus-Handbuch beschrieben, sind die einzigen, die keine Semikolons akzeptieren. Wobei SQL-Befehle mit einem enden ;müssen, um vom Server analysiert zu werden.

Brian Ballsun-Stanton
quelle
Das Semikolon am Ende eines Befehls entspricht einer GO-Anweisung am Ende eines Befehls, der in OSQL / SQLCMD in SQL Server ausgeführt wird. Dies ist das Zeichen, mit dem der Befehl analysiert und ausgeführt wird.
Marian
7

Wenn Sie eine SQL-Anweisung in SQL * Plus eingeben, müssen Sie wissen, wann Sie damit fertig sind, insbesondere wenn der Befehl mehrere Zeilen umfasst. Daher ist ein Terminalzeichen erforderlich , das mit der Taste eingestellt werden kann set sqlterminator. Dieses Zeichen ist standardmäßig das Semikolon:

SQL> select *
  2  from
  3  dual;

D
-
X

Ändern Sie nun dieses Terminal-Zeichen in ein #:

SQL> set sqlterminator #
SQL> select *
  2  from
  3  dual#

D
-
X

Die SQL-Anweisung wurde mit einem beendet (Ende ausgeführt) #.

Sie fragen: Warum wurde set sqlterminator #kein Semikolon gefolgt? Antwort: Dies ist keine SQL-Anweisung. Anweisungen, die sich auf SQL * Plus und dessen Verhalten, Ausgabe, Verbindung asf (wie set echo onund connect system/manager) beziehen, sind keine SQL-Anweisungen und werden daher ohne Semikolon eingegeben.

Was hat das mit dem zu tun /?

Wenn Sie eine SQL-Anweisung eingegeben haben, hat SQL * plus etwas gefüllt, was es als Puffer bezeichnet. Dieser Puffer kann mit dem listBefehl angezeigt werden :

SQL> list
  1  select *
  2  from
  3* dual
SQL>

(Hinweis: Ich habe nur die Liste eingegeben , der Rest wird zurückgegeben.)

Der /führt nun aus, was sich aktuell im Puffer befindet. Versuchen wir das mal:

SQL> /

D
-
X

Wie zu sehen ist, wird dieselbe Abfrage ausgeführt.

René Nyffenegger
quelle
2

Das Semikolon ist der Sequenzpunkt für den SQL-Parser, während Befehle, die in SQL * Plus ausgeführt werden, ohnehin sofort ausgeführt werden. Vergleichen Sie analog dazu die Semikolons in einem C-Programm mit den in die Shell eingegebenen Befehlen.

Gaius
quelle
0

So wie ich es verstehe, hat der allgemeine SQL-Parser viel gemeinsam mit dem allgemeinen Javascript-Parser, da er nach jedem geeigneten Ort ein Semikolon haben möchte, aber es ist nur unter bestimmten Umständen erforderlich. Als mir das Schreiben von SQL beigebracht wurde, wurde mir gesagt, dass ein Semikolon Teil der Sprache sei und kein zusätzlicher Operator, den wir ignorieren könnten.

jcolebrand
quelle