EACH в Oracle SQL — зачем он нужен и почему может сбивать с толку

🟢 EACH в PL/SQL. Введение

Ключевое слово EACH в PL/SQL не является самостоятельным оператором в Oracle SQL, однако оно может встречаться в:

  • документации, особенно при описании работы с наборами данных

  • описаниях циклов в PL/SQL

  • и, чаще всего, в переводах с других СУБД, например PostgreSQL или MySQL

Из-за этого новички могут подумать, что EACH — это зарезервированное слово. Однако в чистом Oracle SQL оно не используется в синтаксисе операторов.


🔤 Написание

Нет официального синтаксиса в Oracle SQL, где EACH используется как часть кода.

Но в документации и PL/SQL логике можно встретить такие формулировки:

sql
-- Псевдокод/документационный стиль
FOR EACH row IN cursor LOOP
-- обработка
END LOOP;

Это не ключевое слово SQL, а просто способ выразить идею итерации.


🔄 Где может встречаться

  • В учебных материалах, особенно переведённых

  • В статьях о миграции с PostgreSQL или MySQL

  • В PL/SQL комментариях и псевдокоде

  • В REST/JSON API описаниях, связанных с SQL-процессингом


🧪 10 Контекстов, где встречается EACH

1️⃣ Цикл FOR в PL/SQL (без EACH)

plsql
FOR r IN (SELECT * FROM employees) LOOP
DBMS_OUTPUT.PUT_LINE(r.last_name);
END LOOP;

2️⃣ Описание логики: «для каждой строки»

plsql
-- For each row, do something

Это просто комментарий, не SQL-код.


3️⃣ MySQL синтаксис (НЕ Oracle)

sql
DECLARE CONTINUE HANDLER FOR EACH ROW ...

4️⃣ PostgreSQL выражения

sql
FOREACH item IN ARRAY ...

5️⃣ REST API примеры обработки данных

json
"action": "apply discount to each product"

6️⃣ PL/SQL блок обработки записей

plsql
FOR emp_rec IN employees_cursor LOOP
-- аналог "each row"
END LOOP;

7️⃣ Миграция с PostgreSQL: FOREACH в Oracle

Заменяется на обычный FOR или WHILE.


8️⃣ Итерация по коллекциям в PL/SQL

plsql
FOR i IN 1..my_array.COUNT LOOP
-- обработка каждого элемента
END LOOP;

9️⃣ Выражения в хранимых процедурах

plsql
-- для каждой записи в таблице делаем ...

Опять же — не синтаксис, а описание.


🔟 При работе с JSON или XML в Oracle

sql
SELECT jt.*
FROM orders o,
JSON_TABLE(o.items, '$[*]'
COLUMNS (product_id NUMBER PATH '$.id')) jt;

Фактически эквивалент «для каждого элемента массива JSON».


🧩 Заключение

EACH — это не оператор Oracle SQL, но его часто встречают в описаниях, особенно при миграции с других СУБД или в переводных статьях. Оно вводит в заблуждение, особенно новичков.

💡 Запомни:

  • EACH не поддерживается синтаксически в Oracle

  • Вместо этого используй обычные циклы FOR, LOOP в PL/SQL

  • Если видишь EACH в коде — скорее всего, это или комментарий, или не Oracle SQL


🔜 Следующая статья:

DUMP в Oracle SQL — как просматривать внутреннее представление данных в колонках


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии