Некоторые операторы, такие как 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
и без точки с запятой.
В чем причина этого? Как я могу решить, где поставить точку с запятой, а где нет?
oracle
oracle-11g-r2
sqlplus
Lazer
источник
источник
Ответы:
Команды для локального экземпляра выполняются по возвращении. Многострочные команды на сервере выполняются через точку с запятой
Специальные команды, описанные в руководстве по SQL * Plus, являются единственными, которые не принимают точки с запятой. Wheras SQL Commands должны заканчиваться на a
;
для того, чтобы быть проанализированным сервером.источник
Когда вы вводите оператор SQL в SQL * Plus, он должен знать, когда вы закончили с ним, особенно если команда занимает несколько строк. Следовательно, он требует символьного символа терминала, который можно установить с помощью
set sqlterminator
. По умолчанию этот символ является точкой с запятой:Теперь, изменив этот конечный символ на
#
:Оператор SQL был завершен (конец выполнен) с
#
.Вы спрашиваете: почему было
set sqlterminator #
не стоит точка с запятой? Ответ, потому что это не оператор SQL. Операторы, относящиеся к SQL * Plus и его поведению, выводу, соединению asf (например,set echo on
иconnect system/manager
), не являются операторами SQL и поэтому вводятся без точки с запятой.Какое это имеет отношение к
/
?Когда вы вводите оператор SQL, SQL * plus заполняет что-то, что он называет буфером. Этот буфер может быть показан с
list
команды:(Примечание: я только вошел список , остальное возвращается)
/
Теперь выполняет то , что в данный момент в буфере. Давайте попробуем это:Как видно, тот же запрос выполняется.
источник
Точка с запятой - это точка последовательности для синтаксического анализатора SQL, в то время как команды, которые выполняются в SQL * Plus, в любом случае выполняются немедленно. В качестве аналогии сравните точки с запятой в C-программе с командами, введенными в оболочку.
источник
Насколько я понимаю, общий синтаксический анализатор SQL имеет много общего с общим синтаксическим анализатором javascript в том смысле, что ему нужно ставить точку с запятой после каждого подходящего места, но это не требуется, за исключением определенных обстоятельств. Когда меня учили писать SQL, мне сказали, что точка с запятой является частью языка, а не дополнительным оператором, который мы можем игнорировать.
источник