ROWTYPE в Oracle SQL — как описывать переменные в PL/SQL

🟢 ROWTYPE в Oracle SQL. Введение

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


🔤 Написание

plsql
имя_переменной имя_таблицы%ROWTYPE;

🔄 Где используется ROWTYPE

  • Автоматическое создание структур переменных

  • Снижение зависимости от схемы таблицы

  • Упрощение чтения строк из таблицы

  • Использование в курсорах

  • Сокращение кода при SELECT INTO


🧪 10 Примеров использования ROWTYPE

1️⃣ Объявление переменной типа строки из таблицы

plsql
DECLARE
v_emp employees%ROWTYPE;
BEGIN
SELECT * INTO v_emp
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE(‘Имя: ‘ || v_emp.first_name);
END;

2️⃣ Использование ROWTYPE в курсоре

plsql
DECLARE
CURSOR c_depts IS SELECT * FROM departments;
v_dept departments%ROWTYPE;
BEGIN
OPEN c_depts;
LOOP
FETCH c_depts INTO v_dept;
EXIT WHEN c_depts%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_dept.department_name);
END LOOP;
CLOSE c_depts;
END;

3️⃣ %ROWTYPE с представлением

plsql
DECLARE
v_data user_tables%ROWTYPE;
BEGIN
SELECT * INTO v_data FROM user_tables WHERE ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('Таблица: ' || v_data.table_name);
END;

4️⃣ Сравнение: без ROWTYPE

plsql
-- Ручное объявление:
DECLARE
v_id employees.employee_id%TYPE;
v_name employees.first_name%TYPE;
BEGIN
SELECT employee_id, first_name INTO v_id, v_name
FROM employees WHERE employee_id = 100;
END;

5️⃣ И тот же пример с %ROWTYPE (короче и гибче)

plsql
DECLARE
v_emp employees%ROWTYPE;
BEGIN
SELECT * INTO v_emp
FROM employees
WHERE employee_id = 100;
END;

6️⃣ Модификация полей записи

plsql
DECLARE
v_emp employees%ROWTYPE;
BEGIN
SELECT * INTO v_emp FROM employees WHERE employee_id = 101;
v_emp.salary := v_emp.salary * 1.10;
DBMS_OUTPUT.PUT_LINE(‘Новая зарплата: ‘ || v_emp.salary);
END;

7️⃣ Передача %ROWTYPE как параметра в процедуру

plsql
PROCEDURE log_employee(p_emp employees%ROWTYPE) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(p_emp.first_name || ' ' || p_emp.last_name);
END;

8️⃣ Комбинирование %ROWTYPE с BULK COLLECT

plsql
DECLARE
TYPE emp_tab IS TABLE OF employees%ROWTYPE;
v_emps emp_tab;
BEGIN
SELECT * BULK COLLECT INTO v_emps FROM employees WHERE department_id = 50;
END;

9️⃣ Сравнение записей

plsql
DECLARE
v1 employees%ROWTYPE;
v2 employees%ROWTYPE;
BEGIN
SELECT * INTO v1 FROM employees WHERE employee_id = 100;
SELECT * INTO v2 FROM employees WHERE employee_id = 101;
IF v1.salary > v2.salary THEN
DBMS_OUTPUT.PUT_LINE(‘Первый сотрудник зарабатывает больше’);
END IF;
END;

🔟 Автоматическая адаптация при добавлении колонок

Если в таблицу employees добавить новый столбец, код с %ROWTYPE автоматически его подхватит — ничего менять не нужно.


🧩 Заключение

%ROWTYPE — это мощный инструмент в PL/SQL, позволяющий сильно сократить код, повысить его гибкость и надёжность. Он отлично подходит для работы с целыми строками из таблиц и минимизирует ручной труд при объявлении переменных.

💡 Запомни:

  • %ROWTYPE создаёт переменную, копирующую структуру строки

  • Упрощает SELECT INTO, курсоры и вызовы процедур

  • Устойчив к изменениям схемы

  • Отлично работает с BULK COLLECT


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

ROWNUM в Oracle SQL — как ограничить выборку строк быстро и эффективно


 

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