2010-09-24 2 views
0

Я хочу, чтобы инструмент или решение выясняли таблицу, на которой была запущена процедура | Функция или пакет Учитывая код PL/SQL.Как получить имя таблицы с операцией UPDATE SELECT DELETE INSERT UPDATE

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

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

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

SELECT FROM: TABLE1

DELETE FROM: TABLE2

вставить в: Table3

ВЫЗОВ AnotherPROC:

SELECT FROM: table4

УДАЛИТЬ ОТ: ТАБЛИЦУ

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

ответ

-1

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

2

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

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

+0

зависимости хорошие. я думал только о трассировке. однако зависимости могут помочь охватить все возможные воздействия, это, вероятно, то, что необходимо с точки зрения тестирования! но рекурсивная проблема сложна :( –

+0

Динамический SQL не отслеживается в DBA_DEPENDENCIES. Оба решения необходимы для покрытия кода. –

0

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

Трассировка

Файл трассировки может записывать все, но все это хранится в текстовом файле, предназначены для чтения человеком. Есть много примеров о том, как сделать это, вот один, который просто работал для меня: 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.Я уверен, что есть инструменты для этого, но у меня нет опыта с ними.

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

Смежные вопросы