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


Инструкция FOR

применимо:отмечено как 'Да' Databricks Runtime 16.3 и более поздних версий

Важный

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

Повторите выполнение списка инструкций для каждой строки, возвращаемой запросом.

Эта конструкция может использоваться только в составной конструкции.

Синтаксис

[ label : ] FOR [ variable_name AS ] query
  DO
  { stmt ; } [...]
  END FOR [ label ]

Параметры

  • метки

    Необязательная метка цикла, которая является уникальной среди всех меток для инструкций, в которых содержится оператор FOR. Если указана конечная метка, она должна соответствовать начальной метки. Метка может использоваться для ПРЕРВАТЬ или ИТЕРИРОВАТЬ цикл. Чтобы квалифицировать ссылки на столбцы цикла, используйте variable_name, а не label.

  • variable_name

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

  • stmt

    Инструкция SQL

Примечания

Если запрос работает с таблицей, которая также изменяется в теле цикла, семантика зависит от источника данных. Для таблиц Delta запрос останется без изменений. Databricks не гарантирует полное выполнение запроса, если цикл FOR завершается преждевременно из-за инструкции LEAVE или условия ошибки. Если во время выполнения запроса возникают исключения или побочные эффекты, Databricks не гарантирует, в какой момент времени в цикле они происходят. Часто FOR циклы можно заменить реляционными запросами, которые обычно более эффективны.

Примеры

-- sum up all odd numbers from 1 through 10
> BEGIN
    DECLARE sum INT DEFAULT 0;
    sumNumbers: FOR row AS SELECT num FROM range(1, 20) AS t(num) DO
      IF num > 10 THEN
         LEAVE sumNumbers;
      ELSEIF num % 2 = 0 THEN
        ITERATE sumNumbers;
      END IF;
      SET sum = sum + row.num;
    END FOR sumNumbers;
    VALUES (sum);
  END;
 25

-- Compare with the much more efficient relational computation:
> SELECT sum(num) FROM range(1, 10) AS t(num) WHERE num % 2 = 1;
 25