Насколько мне известно, никто не сделал это со 100% точностью.Самое близкое, что вы получите, это ALL / DBA_DEPENDENIES, но он не сообщает вам, если к таблице обращаются при помощи SELECT, INSERT, UPDATE или DELETE.
Это, однако, разрешит синонимы.
Обратная сторонаэто то, что он не будет включать таблицы, на которые ссылаются в динамическом SQL.
Если у вас есть база данных, которая использует конкретное соглашение об именах для таблиц (например, Tnnn_XXXXX), вы можете сделать:
SELECT DISTINCT c.text, c.name, c.type, t.table_name
FROM user_source c, user_tables t
WHERE UPPER(t.text) like '%' || t.name_name || '%' -- Maybe REGEXP_LIKE better
ORDER BY 2, 1, 4;
Я работалв проекте десятилетия назад, где им нужна была матрица программ CRUD (PLSQL, SQL, Oracle Forms / Reports, Pro C, Pro COBOL) и к каким таблицам обращались каждая.
Единственное решениев то время я мог написать синтаксический анализатор (в C), который анализировал кодовую базу для поиска и обработки SQL.Мой даже сообщил столбцы, а также таблицы.Программа на C анализировала источник в поисках KEYWORDS и символов для управления механизмом состояний.Потребовалось несколько недель, чтобы уточнить и начать работать со всеми различными типами кодовой базы.
В конце концов, единственное, что он не мог сделать, - это динамические запросы, в которых имя таблицы было построено из значений переменных.Но обходной путь здесь заключался в том, чтобы захватить файлы tkprof и обработать их.
К сожалению, у меня больше нет исходного кода для этого.
Однако, если бы мне пришлось сделать это снова, яиспользует Lex / Yacc / Bison для синтаксического анализа SQL и построения системы на основе этих инструментов.
Быстрый поиск обнаружил следующее:
https://github.com/jgarzik/sqlfun
https://www.oreilly.com/library/view/flex-bison/9780596805418/ch04.html
Не малое начинание.