ROWID в Oracle SQL — как получить уникальный адрес строки

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

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

Это один из самых быстрых способов обращения к строке и инструмент продвинутой диагностики, обновлений и анализа.


🔤 Написание

sql
SELECT ROWID FROM имя_таблицы;

Формат ROWID может выглядеть, например, так:

nginx
AAARaSAAFAAAAASAAA

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

  • Быстрый доступ к конкретной строке

  • Поиск дубликатов

  • Удаление/обновление строк без первичного ключа

  • Диагностика производительности

  • Сравнение, отладка и логгинг


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

1️⃣ Вывести ROWID каждой строки

sql
SELECT ROWID, first_name, last_name
FROM employees;

2️⃣ Найти дубликаты по имени, используя ROWID

sql
SELECT * FROM employees e1
WHERE EXISTS (
SELECT 1 FROM employees e2
WHERE e1.first_name = e2.first_name
AND e1.last_name = e2.last_name
AND e1.ROWID > e2.ROWID
);

3️⃣ Удалить дубликаты с использованием ROWID

sql
DELETE FROM employees
WHERE ROWID NOT IN (
SELECT MIN(ROWID)
FROM employees
GROUP BY first_name, last_name
);

4️⃣ Обновить строку по ROWID

sql
UPDATE employees
SET salary = salary * 1.1
WHERE ROWID = 'AAARaSAAFAAAAASAAA';

5️⃣ Получить строку по ROWID

sql
SELECT * FROM employees
WHERE ROWID = 'AAARaSAAFAAAAASAAA';

6️⃣ Сравнение двух таблиц по ROWID

sql
SELECT a.ROWID, a.col1, b.col1
FROM table_a a, table_b b
WHERE a.id = b.id
AND a.col1 != b.col1;

7️⃣ Сортировка по ROWID (как по порядку вставки)

sql
SELECT * FROM employees
ORDER BY ROWID;

8️⃣ Сравнение строк при импорте данных

sql
SELECT *
FROM employees e
WHERE NOT EXISTS (
SELECT 1 FROM employees_temp t
WHERE e.ROWID = t.ROWID
);

9️⃣ Получение строки с наименьшим ROWID

sql
SELECT * FROM employees
WHERE ROWID = (
SELECT MIN(ROWID) FROM employees
);

🔟 Использование ROWID в PL/SQL

plsql
DECLARE
v_rowid ROWID;
BEGIN
SELECT ROWID INTO v_rowid
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE(‘ROWID: ‘ || v_rowid);
END;

🧩 Заключение

ROWID — это мощный системный механизм, обеспечивающий максимально быстрый доступ к строкам. Он может быть незаменим при поиске дубликатов, отладке и точечной модификации данных.

💡 Запомни:

  • ROWID — физический адрес строки

  • Не является надёжным постоянным идентификатором (при rebuild он меняется)

  • Используется для удаления дубликатов, ускорения выборок и диагностики

  • Поддерживается во всех DML-операциях


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

REVERSE в Oracle SQL — как использовать разворот индексов и строк


 

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