Основы PL/pgSQL в СУБД PostgreSQL

Курс по изучению процедурного расширения PL/pgSQL в СУБД PostgreSQL. Основная концепция PL/pgSQL заключается в том, чтобы преодолеть ограничения языка SQL и предоставить разработчикам новые возможности для работы с базами данных.

Поступить на курс

Погружение в базы данных PostgreSQL

Данный курс является консолидацией теоретических основ и практических примеров, которые демонстрируют работу операторов и функций SQL в системе управления базами данных PostgreSQL.

Поступить на курс

JSON в PostgreSQL

Курс «JSON в PostgreSQL» познакомит вас с форматом JSON и покажет, как создавать и обрабатывать JSON-данные в СУБД PostgreSQL.

Поступить на курс

XML в PostgreSQL

Курс по изучению и практическому применению расширяемого языка разметки XML (eXtensible Markup Language) в системе управления базами данных PostgreSQL.

Поступить на курс

Оконные функции в PostgreSQL

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

Поступить на курс

Массивы в PostgreSQL

Курс по изучению и практическому применению массивов (array) в системе управления базами данных PostgreSQL.

Поступить на курс

 ›  ›  ›  › Основы циклов в PL/SQL Oracle

Основы циклов в PL/SQL Oracle

Что такое циклы в PL/SQL?

Циклами в PL/SQL называются управляющие структуры, которые предназначены для многократного выполнения программного кода. Существует три вида циклов: LOOP (простые, бесконечные), FOR и WHILE. Каждая разновидность циклов предназначена для определенных целей, имеет свои нюансы и правила использования.

Примеры разных циклов

Чтобы дать начальное представление о разных циклах и о том, как они работают, рассмотрим три процедуры. В каждом случае для каждого года в диапазоне от начального до конечного значения вызывается процедура display_total_sales

Простой цикл (LOOP)

Простой цикл начинается с ключевого слова LOOP и завершается командой END LOOP. Выполнение цикла прерывается при выполнении команды EXIT, EXIT WHEN или RETURN в теле цикла (или при возникновении исключения):

PROCEDURE display_multiple_years (
   start_year_in IN PLS_INTEGER
  ,end_year_in IN PLS_INTEGER
)
IS
   l_current_year PLS_INTEGER := start_year_in;
BEGIN
   LOOP
      EXIT WHEN l_current_year > end_year_in;
      display_total_sales (l_current_year);
      l_current_year :=  l_current_year + 1;
   END LOOP;
END display_multiple_years;

Цикл FOR

Цикл FOR существует в двух формах: числовой и курсорной. В числовых циклах FOR программист задает начальное и конечное целочисленные значения, а PL/SQL перебирает все промежуточные значения, после чего завершает цикл:

PROCEDURE display_multiple_years (
    start_year_in IN PLS_INTEGER
   ,end_year_in IN PLS_INTEGER
 )
 IS
 BEGIN
    FOR l_current_year IN start_year_in .. end_year_in
    LOOP
       display_total_sales (l_current_year);
    END LOOP;
 END display_multiple_years;

Курсорная форма цикла FOR имеет аналогичную базовую структуру, но вместо границ числового диапазона в ней задается курсор или конструкция SELECT:

PROCEDURE display_multiple_years (
    start_year_in IN PLS_INTEGER
   ,end_year_in IN PLS_INTEGER
 )
 IS
 BEGIN
    FOR l_current_year IN (
       SELECT * FROM sales_data
        WHERE year BETWEEN start_year_in AND end_year_in)
    LOOP
       -- Процедуре передается запись, неявно объявленная
       -- с типом sales_data%ROWTYPE...
       display_total_sales (l_current_year);
    END LOOP;
 END display_multiple_years;

Цикл WHILE

Цикл WHILE имеет много общего с простым циклом. Принципиальное отличие заключается в том, что условие завершения проверяется перед выполнением очередной итерации. Возможны ситуации, в которых тело цикла не будет выполнено ни одного раза:

PROCEDURE display_multiple_years (
   start_year_in IN PLS_INTEGER
  ,end_year_in IN PLS_INTEGER
)
IS
   l_current_year PLS_INTEGER := start_year_in;
BEGIN
   WHILE (l_current_year <= end_year_in)
   LOOP
      display_total_sales (l_current_year);
      l_current_year :=  l_current_year + 1;
   END LOOP;
END display_multiple_years;

В приведенных примерах самым компактным получился цикл FOR. Однако его можно использовать только потому, что нам заранее известно, сколько раз будет выполняться тело цикла. Во многих других случаях количество повторений может быть заранее неизвестно, поэтому для них цикл FOR не подходит.

Структура циклов PL/SQL

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

Ограничители — ключевые слова, определяющие начало цикла, условие завершения, и команда END LOOP, завершающая цикл.

Тело цикла — последовательность исполняемых команд внутри границ цикла, выполняемых на каждой итерации.

На рисунке ниже изображена структура цикла WHILE.

Структура цикла WHILE в PL/SQL Oracle

В общем случае цикл можно рассматривать как процедуру или функцию. Его тело — своего рода «черный ящик», а условие завершения — это интерфейс «черного ящика». Код, находящийся вне цикла, ничего не должен знать о происходящем внутри него.

Метки: , , , , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *