Oracle. Поиск объектов в БД.
Периодически при ELT приходится изменять алгоритмы сбора таблиц в базе. Хорошо, если эта таблица сама по себе, и больше нигде не используется, или эти изменения не могут никак повлиять на существующие пайплайны или другие объекты. Но не всегда это так, увы, и приходится смотреть зависимости.
Для поиска упоминания нужной таблицы (в примере ниже my_table_name) в хранимом коде подойдёт этот селект:
select * from ALL_SOURCE where upper(text) like '%MY_TABLE_NAME%'
Для поиска представлений, зависящих от искомой таблицы, можно использовать селект ниже:
select so.owner, so.object_name, so.object_type , 'referenced by' as ref_by, ro.owner, ro.object_name, ro.object_type from all_objects so -- source object join public_dependency pd on pd.referenced_object_id=so.object_id join all_objects ro -- referenced object on ro.object_id=pd.object_id where so.object_type='TABLE' and so.object_name='MY_TABLE_NAME' and so.owner='MY_OWNER_NAME' and ro.object_type = 'VIEW'
Напоследок замечание про представления словаря данных.
The ALL_* data dictionary views show you only objects you have access to and when queried in a procedure show only objects the owner of the procedure has DIRECT access to (as opposed to via a role).
Stored procedures always run with the priveleges granted directly to the owner of the procedure. The ALL_* data dictionary views obey that same logic — they only return the data you can see in the environment you are executing in.
https://www.orafaq.com/usenet/comp.databases.oracle.server/1998/01/22/1124.htm