Niektóre instrukcje, takie jak tworzenie tabeli, wstawianie do itp., Przyjmują średnik na końcu:
CREATE TABLE employees_demo
( employee_id NUMBER(6)
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn_demo NOT NULL
) ;
podczas gdy inni lubią
set echo on
connect system/manager
przejść również bez średnika.
Jakie jest tego uzasadnienie? Jak sam zdecydować, gdzie umieścić średnik, a gdzie nie?
oracle
oracle-11g-r2
sqlplus
Lazer
źródło
źródło
Odpowiedzi:
Komendy do instancji lokalnej są wykonywane po powrocie. Wieloliniowe polecenia do serwera są wykonywane na średniku
Specjalne polecenia wyszczególnione w instrukcji SQL * Plus są jedynymi, które nie akceptują średników. Polecenia Wheras SQL muszą kończyć się
;
na, aby serwer mógł je przeanalizować.źródło
Wprowadzając instrukcję SQL do SQL * Plus, musi ona wiedzieć, kiedy to zrobisz, zwłaszcza jeśli polecenie obejmuje wiele wierszy. Dlatego wymaga znaku końcowego, który można ustawić za pomocą
set sqlterminator
. Domyślnie tym znakiem jest średnik:Teraz zmień ten znak terminala na
#
:Instrukcja SQL została zakończona (zakończona) za pomocą
#
.Pytasz: dlaczego
set sqlterminator #
nie było średnika? Odpowiedź, ponieważ nie jest to instrukcja SQL. Instrukcje odnoszące się do SQL * Plus i jego zachowania, wyniku, połączenia asf (takie jakset echo on
iconnect system/manager
) nie są instrukcjami SQL i dlatego są wprowadzane bez średnika.Co to ma wspólnego z
/
?Po wprowadzeniu instrukcji SQL SQL * plus wypełnił coś, co nazywa się buforem. Ten bufor można wyświetlić za pomocą
list
polecenia:(Uwaga: wpisałem tylko listę , reszta jest zwracana)
/
Teraz wykonuje to, co jest obecnie w buforze. Spróbujmy:Jak widać, wykonywane jest to samo zapytanie.
źródło
Średnik jest punktem sekwencji dla analizatora składni SQL, natomiast polecenia wykonywane w SQL * Plus są i tak wykonywane natychmiast. Analogicznie porównaj średniki w programie C z poleceniami wprowadzonymi do powłoki.
źródło
Rozumiem, że ogólny parser SQL ma wiele wspólnego z ogólnym parserem javascript, ponieważ chciałby średnika po każdym odpowiednim miejscu, ale nie jest to wymagane, z wyjątkiem pewnych okoliczności. Kiedy nauczono mnie pisać SQL, powiedziano mi, że średnik jest częścią języka, a nie dodatkowym operatorem, który możemy zignorować.
źródło