Разделители
По умолчанию разделителем в клиенте 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 всегда могут быть использованы, даже если указан пользовательский разделитель.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/delimiters/