Jakie znaczenie ma średnik na końcu poleceń SQL * Plus?

16

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?

Lazer
źródło
6
+1 Aby sprawić, że wszystko będzie bardziej mylące, możesz użyć / w następującym wierszu zamiast; w niektórych przypadkach.
bernd_k

Odpowiedzi:

15

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ć.

Brian Ballsun-Stanton
źródło
Średnik na końcu polecenia jest taki sam, jak instrukcja GO na końcu polecenia wykonanego w OSQL / SQLCMD na serwerze Sql Server. To znak, że polecenie zostanie przeanalizowane i wykonane.
Marian
7

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:

SQL> select *
  2  from
  3  dual;

D
-
X

Teraz zmień ten znak terminala na #:

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

D
-
X

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 jak set echo oni connect 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ą listpolecenia:

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

(Uwaga: wpisałem tylko listę , reszta jest zwracana)

/Teraz wykonuje to, co jest obecnie w buforze. Spróbujmy:

SQL> /

D
-
X

Jak widać, wykonywane jest to samo zapytanie.

René Nyffenegger
źródło
2

Ś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.

Gajusz
źródło
0

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ć.

jcolebrand
źródło