Oracle Developer👨🏻‍💻
3.22K subscribers
608 photos
68 videos
2 files
486 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
ROWID - уникальный адрес/идентификатор строки

Самый быстрый доступ к строке. Никакие primary key/unique key не способы дать такой быстрый доступ.
Oracle достаточно получить физический адрес, чтобы адресоваться до нужной ячейки на диске.

Выглядит он примерно так: 000000FFFBBBBBBRRR
Соответственно, 0000000 - это номер объекта, FFF - это номер файла, BBBBBB - номер блока, RRR - номер строки.

Хранить и запоминать его в долговренное хранилище не стоит, т.к. он может измениться. Но вот использовать в наших алгоритмах очень даже можно.
———-
Приведу пример.
declare
v_rowid rowid;
begin
select rowid from my_tab where ... for update;
... что-то делаем ...
update my_tab t
set t.поле = новое_значение
where t.rowid = v_rowid;
end;
/
На первом шаге мы выбрали по каким-то критериям искомую строку, произвели какие-то манипуляции и хотим её изменить (например, статус). Используя rowid в условии where мы можем максимально быстро получить к ней доступ.

#теория #архитектура #rowid
👍6
Пакет DBMS_ROWID

Пакет интересен с точки зрения получения информация о ROWID (#rowid):
номер блока, номер объекта, номер файла и другие части составляющие rowid.

А зачем нам вся эта информация?

Бывает, полезно понимать какому объекту принадлежит строка. Осуществить это можно с использованием функции dbms_rowid.rowid_object.

Например, секционированная таблица - это логический объект. Физически, данные хранятся в секциях/подсекциях. Запросом ниже, мы сможем понять к какому конкретно физическому объекту относится строка.

select s.*, t.subobject_name
from секционированная_табл s
join user_objects t on t.object_id = dbms_rowid.rowid_object(s.rowid);

Это бывает необходимо при манипуляциях с секциями (очистка, обмен и т.п.).
Кстати, пока есть места в интенсиве по секционированию. Хотите знать больше? Записывайтесь.

#архитектура #rowid #dbms_rowid #секционирование