CPA-Мастер
Блог о заработке на партнёрских программах в CPA-сетях

Циклы FOR и WHILE в PL/SQL

С начала лета я вплотную работаю с технологиями Oracle, как можно понять и по другим постам, в частности с процедурным расширением языка cтруктурированных запросов PL/SQL. Я решил написать пару записей на эту тему и начинаю с циклов.

Сначала рассмотрим простейший вариант цикла FOR, в котором посчитаем от одного до десяти и выведем значение переменной i. Скопируйте приведённый ниже блок PL/SQL и выполните его в Oracle SQL Developerб Apex SQL Workshop или другом инструменте для работы с базами данных на ваш выбор. (Примечание: Если процедура DBMS_OUTPUT.PUT_LINE не работает, включите вывод данных командойSET SERVEROUTPUT ON.)

BEGIN
	FOR i IN 1..10
	LOOP
		DBMS_OUTPUT.PUT_LINE('i = ' || i);
	END LOOP;
END;

Чтобы сделать то же самое в цикле WHILE, нужно объявить (например) цифровую переменную и повышать счётчик при каждом шаге. В нашем случае переменная i имеет в начале значение 1 и в конце петли ей присваивается новое значение — на единицу больше. Цикл исполняется до тех пор, пока значение i ниже или равняется десяти.

DECLARE
	i NUMBER := 1;
BEGIN
	WHILE i <= 10
	LOOP
		DBMS_OUTPUT.PUT_LINE('i = ' || i);
		i := i + 1;
	END LOOP;
END;

Если вы ищите в цикле только один результат и вам необязательно проходить цикл до конца, то его выполнение можно прервать оператором EXIT. Ниже всё тот же WHILE, но хотя в условии говорится, что считать будем до десяти, внутри петли цикл обрывается, когда переменная равняется трём.

DECLARE
	i NUMBER := 1;
BEGIN
	WHILE i <= 10
	LOOP
		DBMS_OUTPUT.PUT_LINE('i = ' || i);
		IF i = 3 THEN
			DBMS_OUTPUT.PUT_LINE('выход из цикла');
			EXIT;
		END IF;
		i := i + 1;
	END LOOP;
END;

Для последнего примера цикла FOR с запросом SQL понадобится простенькая таблица в базе данных, в моём примере с двумя колонками - в одной числа, в другой строки.

CREATE TABLE test_table(	
        number_column NUMBER, 
	text_column VARCHAR2(50)
)

Таблица может содержать, например, такие данные.

Скриншот 1: Таблица в примере

Скриншот 1: Таблица в примере

В качестве аргумента оператору IN можно передать не только значения от и до, но и целый SQL-запрос. Выбранные через SELECT колонки (в примере number_column и text_column) можно использовать в петле через переменную i (i.number_column, i.text_column).

BEGIN
	FOR i IN (
                SELECT number_column, text_column 
                FROM test_table
                ORDER BY number_column ASC
        )
	LOOP
		DBMS_OUTPUT.PUT_LINE(
                        'i.number_column = ' || i.number_column || 
                        ', i.text_column = ' || i.text_column
                );
	END LOOP;
END;
Понравился пост? Поделись в соцсетях и подписывайся на аккаунты в Twitter и Facebook!

Leave a comment

Your email address will not be published.

*