Яке значення крапки з комою в кінці команд SQL * Plus?


16

Деякі заяви, як створити таблицю, вставити в і т.д., мають крапку з комою в кінці:

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

пройти також без крапки з комою.

Які міркування за цим? Як я можу сам вирішити, куди покласти крапку з комою, а де ні?


6
+1 Щоб зробити речі більш заплутаними, ви можете використовувати / у наступному рядку замість; В деяких випадках.
bernd_k

Відповіді:


15

Команди до місцевого екземпляра виконують при поверненні. Багаторядкові команди серверу виконуються крапкою з комою

Спеціальні команди, докладно описані в посібнику SQL * Plus, є єдиними, які не приймають напівколонок. Команди Sras Wheras повинні закінчуватися символом а ;для того, щоб їх проаналізував сервер.


Точка з комою в кінці команди - це те саме, що оператор GO в кінці команди, виконаної в OSQL / SQLCMD на сервері Sql. Це знак, що команда буде проаналізована і виконана.
Маріан

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 закінчувався (закінчується виконанням) з a #.

Ви запитуєте: чому 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, виконуються негайно. Як аналогія, порівняйте крапки з комою в програмі С з командами, введеними в оболонку.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.