
Август/Сентябрь 2003
Профессионалу разработчику
Стивен Фернстайн
Как построить утилиту анализа кода и сделать это правильно с первого раза
(Building a Code-Analysis Utility
and Doing It Right the First Time,
by Steven Feuerstein)
Статья 1, часть 2
Источник: журнал Oracle Magazine, раздел “Online only articles”, 2003, http://otn.oracle.com/oramag/webcolumns/2003/techarticles/feuerstein_codech.html
http://otn.oracle.com/oramag/webcolumns/2003/techarticles/feuerstein_codech_pt2.html
[От редакции OM/RE: Перевод первой части этой статьи был опубликован в предыдущем выпуске журнала
/ru/oramag/julyaugust2003/dev_feuer_codech_11.html .]
Как насчет поставляемых пакетов?
Я уже посмотрел на набор представлений словаря данных. Какие еще готовые инструменты предлагает Oracle? Учитывая то, что я был соавтором книги под названием “Встроенные пакеты Oracle”, естественно, что я стал искать встроенные или поставляемые пакеты (терминология Oracle), которые могут помочь.
Я проверил представление ALL_OBJECTS на предмет каких-нибудь интересных пакетов:
SQL> SELECT *
2 FROM all_objects
3 WHERE owner = 'SYS'
4 AND object_name LIKE '%ARGUMENT%'
5 AND object_type = 'PACKAGE';
no rows selected
Ничего. Далее, я посмотрел ALL_SOURCE, ища по таким словам как “аргумент” и “параметр” непосредственно в исходном коде поставляемых пакетов. В действительности, я мог просматривать только спецификации пакетов, поскольку тела пакетов закрыты (wrapped) (грубая, и только отчасти удачная форма шифрования). К тому же, всякий раз, когда вы думаете о запуске таких запросов, необходимо остерегаться поисков, которые выполняются долгий период времени, потому что ALL_SOURCE обычно содержит большое количество строк (мое [представление] в настоящее время содержит 111,782 строк).
Поэтому я написал другую маленькую утилиту, процедуру dd_source_scan procedure (она находится в сгружаемом файле ddsourcescan.sp), чтобы убедиться, что я делаю это настолько эффективно, насколько это возможно. Я хотел найти имя любой поставляемой процедуры, которая использует представление словаря данных ALL_ARGUMENTS:
BEGIN
dd_source_scan (
'%', 'all_arguments');
END;
К сожалению, поиск по этому ключевому слову вернул ноль строк исходного кода. Следующим шагом было ослабление критерия запроса и поиск спецификаций пакета, которые содержат слово arguments:
BEGIN
dd_source_scan (
|