Август/Сентябрь 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 (

E-mail this page