Spec-Zone.ru › MariaDB

BEGIN END

Синтаксис

[begin_label:] BEGIN [NOT ATOMIC]
    [statement_list]
END [end_label]

Ключевое слово `BEGIN` обязательно при использовании вне хранимой процедуры. Внутри хранимых процедур или в анонимном блоке, ключевое слово `BEGIN` само по себе начинает новый анонимный блок.

Описание

Синтаксис `BEGIN ... END` используется для записи составных операторов. Составной оператор может содержать несколько операторов, заключённых между ключевыми словами `BEGIN` и `END`. Список операторов `statement_list` представляет собой список одного или более операторов, каждый из которых завершается точкой с запятой (т.е., `;`). Разделитель списка операторов `statement_list` является необязательным, что означает, что пустой составной оператор (пустой блок) допустим.

Обратите внимание, что выполнение составного оператора `BEGIN ... END` произведёт коммит. Если вы работаете в режиме автоматического коммита, каждый оператор будет коммитирован отдельно. Если вы не работаете в режиме автоматического коммита, вы должны выполнить `COMMIT` или `ROLLBACK` после `BEGIN ... END`, чтобы обновить базу данных.

Использование нескольких операторов требует, чтобы клиент мог отправлять строки операторов, содержащие разделитель `;`. Это обрабатывается в командной строке клиента `mysql` командой `DELIMITER`. Изменение разделителя конца оператора (например, на `$$`) позволяет использовать составные операторы внутри тела программы.

Составной оператор внутри хранимой программы может быть помечен меткой. Метка `label` не может быть указана без `BEGIN ... END`. Если оба присутствуют, они должны быть одинаковыми.

Конструкции `BEGIN ... END` могут быть вложены. Каждый блок может определять свои собственные переменные, курсор и обработчик, которые не существуют во внешних блоках. Самые локальные объявления переопределяют внешние объекты, использующие то же имя (см. пример ниже).

Порядок объявлений следующий:

  • Локальные переменные;
  • Условные операторы;
  • Курсоры;
  • Обработчики;

Обратите внимание, что блок `BEGIN ... END` может содержать другую вложенную конструкцию `BEGIN ... END`.

Вот пример очень простого анонимного блока:

BEGIN NOT ATOMIC
SET @a=1;
CREATE TABLE test.t1(a INT);
END|

Ниже приведен пример вложенных блоков в хранимой процедуре:

CREATE PROCEDURE t( )
BEGIN
   DECLARE x TINYINT UNSIGNED DEFAULT 1;
   BEGIN
      DECLARE x CHAR(2) DEFAULT '02';
       DECLARE y TINYINT UNSIGNED DEFAULT 10;
       SELECT x, y;
   END;
   SELECT x;
END;

В этом примере переменная типа `TINYINT`, `x`, объявляется во внешнем блоке. Но во внутреннем блоке `x` повторно объявляется как `CHAR` и объявляется переменная `y`. Внутренний `SELECT` показывает «новое» значение `x` и значение `y`. Но когда `x` выбирается во внешнем блоке, возвращается «старое» значение. Окончательный `SELECT` не пытается прочитать `y`, потому что она не существует в этом контексте.

См. также

  • Использование составных операторов вне хранимых программ
  • Изменения в режиме Oracle с MariaDB 10.3
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки 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/begin-end/

Spec-Zone.ru

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