Как получить имя таблицы с помощью операции SELECT DELETE INSERT UPDATE - PullRequest
0 голосов
/ 24 сентября 2010

Я хочу, чтобы инструмент или решение выяснили уязвимую таблицу при запуске процедуры | Функция или пакет, учитывая код PL / SQL.

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

Решение должно работать даже для процедуры, вызывающей процедуру.

Выход может быть:

ВЫБРАТЬ ИЗ: ТАБЛИЦА1

УДАЛИТЬ ИЗ: ТАБЛИЦА2

INSERT INTO: TABLE3

ЗВОНИТЕ AnotherPROC:

ВЫБРАТЬ ИЗ: ТАБЛИЦА 4

УДАЛИТЬ ИЗ: ТАБЛИЦА5

Заранее спасибо:

Ответы [ 3 ]

2 голосов
/ 24 сентября 2010

Для анализа перед запуском, если вы запускаете хранимую процедуру / пакет / функцию, тогда таблица DBA_DEPENDENCIES может сказать вам, какие объекты «зависят» от нее, но это не значит, что на них обязательно может повлиять управление программойможет принимать разные направления.

Анализ после запуска вы можете использовать AUDITing или трассировку, чтобы увидеть, какие таблицы были затронуты.

0 голосов
/ 24 сентября 2010

Есть несколько разных способов получить часть или всю эту информацию, но я не могу придумать какой-либо метод, который даст вам информацию в точном формате, который вы указали.

Трассировка

Файл трассировки может записывать все, но все это хранится в текстовом файле, предназначенном для чтения человеком.Есть много примеров того, как это сделать, вот тот, который только что работал для меня: http://tonguc.wordpress.com/2006/12/30/introduction-to-oracle-trace-utulity-and-understanding-the-fundamental-performance-equation/

Профилирование

Вы можете использовать DBMS_PROFILER, чтобы записать, какие номера строквызываются процедурой.Затем вам нужно соединить номера строк с DBA_SOURCE, чтобы получить фактические команды.

V $ SQL

Эта запись записей выполненных операторов SQL.Вы можете искать SQL по PARSING_SCHEMA_NAME и заказывать по LAST_UPDATE_TIME.Но это не получит PL / SQL, и V $ SQL может быть сложным в использовании.(SQL может устареть или может быть загружен кем-то другим, и т. Д.)

Но чтобы получить именно то, что вам нужно, все эти решения требуют от вас написания программы для анализа SQL и PL / SQL.Я уверен, что есть инструменты для этого, но у меня нет опыта работы с ними.

Вы всегда можете написать свою собственную регистрацию, но это огромный объем работы.Лучшее решение может заключаться в том, чтобы попросить разработчиков надлежащим образом документировать каждую функцию и перечислить цель, входные данные, выходные данные и побочные эффекты всего их кода.

0 голосов
/ 24 сентября 2010

В MySql вы можете получить информацию о таблицах, на которые воздействует добавление ключевого слова EXPLAIN в начале вашего запроса.Это даст вам другую информацию, указанную в столбцах.Проверьте, есть ли такая возможность в Oracle, которая может помочь в вашем сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...