Spec-Zone.ru › MariaDB

Разделители

По умолчанию разделителем в клиенте mariadb является точка с запятой.

При создании сохранённых программ из командной строки, вероятно, потребуется различать стандартный разделитель и разделитель внутри блока BEGIN END. Для лучшего понимания рассмотрим следующий пример:

CREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC
BEGIN
 DECLARE x TINYINT;
 SET x = 42;
 RETURN x;
END; 

Если ввести вышеприведённые строки поочерёдно, клиент mariadb воспримет первую точку с запятой в конце DECLARE x TINYINT строки как окончание оператора. Поскольку это лишь частичное определение, будет выброшено синтаксическое исключение, как показано ниже:

CREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC
BEGIN
DECLARE x TINYINT;
ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version
 for the right syntax to use near '' at line 3

Решение состоит в указании отдельного разделителя на время выполнения, используя команду DELIMITER. Разделитель может быть любым набором символов по вашему выбору, но это должен быть отличительный набор символов, который не вызовет дальнейшей путаницы. // является распространённым выбором и используется в базе знаний.

Вот как функция может быть успешно введена в клиенте mariadb с новым разделителем.

DELIMITER //

CREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC
BEGIN
  DECLARE x TINYINT;
  SET x = 42;
  RETURN x;
END 

//

DELIMITER ;

В конце разделитель восстанавливается до стандартного значения — точки с запятой. Разделители \g и \G всегда могут быть использованы, даже если указан пользовательский разделитель.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/delimiters/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API