Какое значение имеет точка с запятой в конце команд SQL * Plus?

16

Некоторые операторы, такие как create table, insert to etc, в конце ставят точку с запятой:

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

в то время как другие любят

set echo on
connect system/manager

и без точки с запятой.

В чем причина этого? Как я могу решить, где поставить точку с запятой, а где нет?

Lazer
источник
6
+1 Чтобы сделать вещи более запутанными, вы можете использовать / в следующей строке вместо; в некоторых случаях.
bernd_k

Ответы:

15

Команды для локального экземпляра выполняются по возвращении. Многострочные команды на сервере выполняются через точку с запятой

Специальные команды, описанные в руководстве по SQL * Plus, являются единственными, которые не принимают точки с запятой. Wheras SQL Commands должны заканчиваться на a ;для того, чтобы быть проанализированным сервером.

Брайан Баллсун-Стэнтон
источник
Точка с запятой в конце команды совпадает с инструкцией GO в конце команды, выполняемой в OSQL / SQLCMD на Sql Server. Это знак, что команда будет проанализирована и выполнена.
Marian
7

Когда вы вводите оператор SQL в SQL * Plus, он должен знать, когда вы закончили с ним, особенно если команда занимает несколько строк. Следовательно, он требует символьного символа терминала, который можно установить с помощью set sqlterminator. По умолчанию этот символ является точкой с запятой:

SQL> select *
  2  from
  3  dual;

D
-
X

Теперь, изменив этот конечный символ на #:

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

D
-
X

Оператор SQL был завершен (конец выполнен) с #.

Вы спрашиваете: почему было set sqlterminator # не стоит точка с запятой? Ответ, потому что это не оператор SQL. Операторы, относящиеся к SQL * Plus и его поведению, выводу, соединению asf (например, set echo onи connect system/manager), не являются операторами SQL и поэтому вводятся без точки с запятой.

Какое это имеет отношение к /?

Когда вы вводите оператор SQL, SQL * plus заполняет что-то, что он называет буфером. Этот буфер может быть показан сlist команды:

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

(Примечание: я только вошел список , остальное возвращается)

/Теперь выполняет то , что в данный момент в буфере. Давайте попробуем это:

SQL> /

D
-
X

Как видно, тот же запрос выполняется.

Рене Ниффенеггер
источник
2

Точка с запятой - это точка последовательности для синтаксического анализатора SQL, в то время как команды, которые выполняются в SQL * Plus, в любом случае выполняются немедленно. В качестве аналогии сравните точки с запятой в C-программе с командами, введенными в оболочку.

Gaius
источник
0

Насколько я понимаю, общий синтаксический анализатор SQL имеет много общего с общим синтаксическим анализатором javascript в том смысле, что ему нужно ставить точку с запятой после каждого подходящего места, но это не требуется, за исключением определенных обстоятельств. Когда меня учили писать SQL, мне сказали, что точка с запятой является частью языка, а не дополнительным оператором, который мы можем игнорировать.

Jcolebrand
источник