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?
oracle
oracle-11g-r2
sqlplus
Laser
quelle
quelle
Antworten:
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.quelle
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:Ändern Sie nun dieses Terminal-Zeichen in ein
#
: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 (wieset echo on
undconnect 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
list
Befehl angezeigt werden :(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:Wie zu sehen ist, wird dieselbe Abfrage ausgeführt.
quelle
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.
quelle
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.
quelle