Поделиться через


Конструкция BEGIN END составного оператора

Применяется к:отмечено да Databricks SQL отмечено да Databricks Runtime 16.3 и более поздним версиям

Важный

Эта функция доступна в общедоступной предварительной версии.

Реализует блок скрипта SQL, который может содержать последовательность инструкций SQL, инструкций управления потоком, объявлений локальных переменных и обработчиков исключений.

Заметка

При вызове составной инструкции из записной книжки она должна быть единственной инструкцией в ячейке.

Синтаксис

[ label : ]
      BEGIN
      [ { declare_variable | declare_condition } ; [...] ]
      [ declare_handler ; [...] ]
      [ SQL_statement ; [...] ]
      END [ label ]

declare_variable
  DECLARE variable_name datatype [ DEFAULT default_expr ]

declare_condition
  DECLARE condition_name CONDITION [ FOR SQLSTATE [ VALUE ] sqlstate ]

declare_handler
  DECLARE handler_type HANDLER FOR condition_values handler_action

handler_type
  EXIT

condition_values
 { { SQLSTATE [ VALUE ] sqlstate | condition_name } [, ...] |
   { SQLEXCEPTION | NOT FOUND } [, ...] }

Параметры

  • ярлык

    Необязательный идентификатор используется для квалификации переменных, определенных в составном, и для выхода из него. Оба вхождения меток должны совпадать, а метка END может быть указана только в том случае, если указан label:.

    Метка не должна быть указана для составной инструкции верхнего уровня.

  • NOT ATOMIC

    Указывает, что, если инструкция SQL в составной части завершится ошибкой, предыдущие инструкции SQL не будут откатаны. Это единственное возможное поведение и оно является поведением по умолчанию.

  • declare_variable

    Объявление локальной переменной для одной или нескольких переменных

    • variable_name

      Имя переменной. Имя не должно быть квалифицировано, а также должно быть уникальным в составной инструкции.

    • data_type

      Любой поддерживаемый тип данных. Если data_type опущен, необходимо указать DEFAULT, а тип является производным от default_expression.

    • { DEFAULT | = } default_expression

      Определяет начальное значение переменной после объявления. default_expression должен быть преобразуемым к типу данных. Если значение по умолчанию не задано, переменная инициализирована с значением NULL.

  • Declare_condition

    Объявление локального условия

    • condition_name

      Некавалифицированное имя условия распространяется на составную инструкцию.

    • sqlstate

      STRING литерал из 5 буквенно-цифровых символов (без учета регистра), состоящий из A-Z и 0-9. SQLSTATE не должен начинаться с "00", "01" или "XX". Все SQLSTATE, начиная с "02", также будут пойманы предопределенным исключением NOT FOUND. Если значение не указано, значение SQLSTATE равно 45000.

  • declare_handler

    Объявление для обработчика ошибок.

    • handler_type

      • EXIT

        Классифицирует обработчик для выхода из составной инструкции после обработки условия.

    • condition_values

      ** Указывает, на какие sqlstates или условия применяется обработчик. Значения условий должны быть уникальными во всех обработчиках в объединённом блоке. Определенные значения условий имеют приоритет над SQLEXCEPTION.

    • sqlstate

      STRING литерал из 5 символов 'A'-'Z' и '0'-'9' (без учета регистра).

    • condition_name

      Условие, определенное в этом составном операторе, внешнем блоке операторов или системном классе ошибок.

    • SQLEXCEPTION

      Применяется к любому условию ошибки, с которым сталкиваются пользователи.

    • NOT FOUND

      Применяется к любому условию ошибки с классом SQLSTATE "02".

    • handler_action

      Инструкция SQL для выполнения при возникновении любого из значений условия. Чтобы добавить несколько операторов, используйте вложенную составную инструкцию.

  • SQL_statement

    Инструкция SQL, например DDL, DML, инструкция управления или составная инструкция. Любая инструкция SELECT или VALUES создает результирующий набор, который может использовать вызывающая сторона.

Примеры

-- A compound statement with local variables, and exit hanlder and a nested compound.
> BEGIN
    DECLARE a INT DEFAULT 1;
    DECLARE b INT DEFAULT 5;
    DECLARE EXIT HANDLER FOR DIVIDE_BY_ZERO
      div0: BEGIN
        VALUES (15);
      END div0;
    SET a = 10;
    SET a = b / 0;
    VALUES (a);
END;
15