Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
Здравствуйте!
У меня такой вопрос:
Есть спецификация пакета в которой вставлен комментарий с версией объекта
Например
CREATE OR REPLACE PACKAGE OV_TEST.ov_test_pkg IS
/***************************************************************************************
 Назначение: Тестовый пакет рассчета 
 Модуль:     OV   
 
 Изменения:
 Версия    Дата     Автор, описание изменений
 ------ ----------  --------------------------------------------------------------------
 1.0.0  20.01.2010  Громыко А.А.
                    Сознад макет пакета   
 1.0.1  11,02,2010  Петров С.А.
                    Вторая итерация разработки               
***************************************************************************************/

ну и так далее.

Как мне выбрать из этого комментария последнюю версию и вставить её в таблицу???
11 фев 10, 18:01    [8331768]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
hitmanzero,

а как пишутся эти комментарии в пакет?
11 фев 10, 18:05    [8331800]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
suPPLer,

Комментарии эти пишутся вручную
11 фев 10, 18:06    [8331805]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
hitmanzero,

сначала решите - как будете искать - по номеру ли строки / по + второй строке от строки, включающем подстроку 'Версия' / и т.п.

потом - извлекайте нужный кусок нужной строки
11 фев 10, 18:07    [8331809]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hell
Member

Откуда:
Сообщений: 3001
Вытягивать сорц и парсить, как еще..

__________________
For more information, please proceed to http://ot-e.biz
11 фев 10, 18:07    [8331810]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
hitmanzero
suPPLer,

Комментарии эти пишутся вручную


Пусть добавят "!!! Последняя версия: x.x.x.xxxx" пятой строкой в пакете, а Вы парсите...
11 фев 10, 18:09    [8331821]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
suPPLer
Пусть добавят "!!! Последняя версия: x.x.x.xxxx" пятой строкой в пакете, а Вы парсите...


Да, и на всякий - код в БД можно тянуть из DBA_SOURCE.
11 фев 10, 18:11    [8331830]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
Так если разработчик напишет описание на несколько строк или где нить пропустит строку, по номеру уже никак не получится.
11 фев 10, 18:15    [8331848]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
hitmanzero,

а Вы добавьте в спецификацию константу с последней версией. И по комментариям не придётся лазить парсером...
11 фев 10, 18:19    [8331863]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
hitmanzero
Так если разработчик напишет описание на несколько строк или где нить пропустит строку, по номеру уже никак не получится.

разве? имхо, вам нужна последняя по номеру строка лайк '%.%.%' между строкой
лайк '%Версия%' и строкой '%***/%'
11 фев 10, 18:21    [8331873]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
suPPLer,

Всмысле? Добавить константу и каждый раз разработчик будет писать в неё новую версию? Это неудобно =)
11 фев 10, 18:21    [8331874]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
orawish,

Спасибо большое! Только как мне это воплотить? Можно хоть маленький набросочек?
11 фев 10, 18:24    [8331888]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
hitmanzero
suPPLer,

Всмысле? Добавить константу и каждый раз разработчик будет писать в неё новую версию? Это неудобно =)

+1

Аналогичные комментарии можно добавить в процедуру\функцию\тип\вьюху ...
Из опыта: Удобнее последнюю версию с комментарием держать вверху.
11 фев 10, 18:25    [8331889]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
hitmanzero
orawish,

Спасибо большое! Только как мне это воплотить? Можно хоть маленький набросочек?


Для начала ...
      SELECT s.text
        INTO Result
        FROM all_source s, all_source s1
        WHERE s.owner = n_Owner
          AND s.TYPE = n_Type
          AND s.NAME = n_Name
          AND s.line = DECODE(s1.line(+), NULL,s.line, s1.line(+)+3)
          AND s1.text(+) LIKE 'Версия%'
          AND s1.owner(+) = s.owner
          AND s1.NAME(+) = s.NAME
          AND s1.TYPE(+) = s.TYPE
          AND s.TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION', ...)
          AND s1.owner IS NOT NULL
          AND ROWNUM <= 1;
11 фев 10, 18:29    [8331907]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
Andrey.L,

Спасибо огромное тебе. Щас попытаюсь опробывать.
11 фев 10, 18:30    [8331915]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
hitmanzero
orawish,

Спасибо большое! Только как мне это воплотить? Можно хоть маленький набросочек?


~
with t as (
  select min(line) ml
    from user_source
   where type = 'PACKAGE'
     and name = 'PCK_MUMU'
     and text like '%---%'
) select regexp_substr(max(text) keep (dense_rank last order by line),'\d+\.\d+\.\d+')
    from user_source ,t
   where type = 'PACKAGE'
     and name = 'PCK_MUMU'
     and line < ml
     and text like '%.%.%';
11 фев 10, 18:37    [8331934]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
hitmanzero
orawish,

Спасибо большое! Только как мне это воплотить? Можно хоть маленький набросочек?


доводка рашпилем предполагается
with t as (
  select min(line) ml
    from user_source
   where type = 'PACKAGE'
     and name = 'PCK_MUMU'
     and text like '%**/%'
) select regexp_substr(max(text) keep (dense_rank last order by line),'\d+\.\d+\.\d+')
    from user_source ,t
   where type = 'PACKAGE'
     and name = 'PCK_MUMU'
     and line < ml
     and text like '%.%.%';
11 фев 10, 18:41    [8331944]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
А если я вытаскиваю код объекта таким образом
i := sql_txt (sql_text);

      FOR i IN sql_text.FIRST .. sql_text.LAST
      LOOP
         -- !!!!!!
         v_code := v_code || sql_text (i);
      END LOOP;

Как мне считать версию из комментариев? Какой код вместо "!!!!!!" туда нужно вставить?
Я так думаю разработчик будет писать версию в виде "v.1.0.0.0" ?
Подскажите пожалуйста . не пойму просто как в этот цикл впихнуть выбор версии из комментария =(
19 фев 10, 11:58    [8369846]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
hitmanzero
А если я вытаскиваю код объекта таким образом
i := sql_txt (sql_text);

      FOR i IN sql_text.FIRST .. sql_text.LAST
      LOOP
         -- !!!!!!
         v_code := v_code || sql_text (i);
      END LOOP;

Как мне считать версию из комментариев? Какой код вместо "!!!!!!" туда нужно вставить?
Я так думаю разработчик будет писать версию в виде "v.1.0.0.0" ?
Подскажите пожалуйста . не пойму просто как в этот цикл впихнуть выбор версии из комментария =(
Здесь не нужно думать, а нужно жестко установить правила, по которым разработчики будут писать версию, а ты уже будешь парсить исходники.
19 фев 10, 12:45    [8370295]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
Версия точно будет писать в виде "v.1.0.0.0"
Только я не могу придумать как мне в этом цикле выбрать последнюю версию которая будет написана.
19 фев 10, 12:51    [8370345]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
hitmanzero,

Последняя сначала или с конца или после какой-нибудь маски?
19 фев 10, 13:02    [8370472]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
Последняя с начала комментария, но она не обязательно будет последней строчкой в комментарии... Мне надо просто в этом цикле выбрать её из последней строчки содержащей "v.%.%.%.%". Лучше конечно по маске выбирать с помощью рег.выражения. Но как это сделать в этом цикле я незнаю =(
19 фев 10, 13:07    [8370507]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
hitmanzero
Последняя с начала комментария, но она не обязательно будет последней строчкой в комментарии... Мне надо просто в этом цикле выбрать её из последней строчки содержащей "v.%.%.%.%". Лучше конечно по маске выбирать с помощью рег.выражения. Но как это сделать в этом цикле я незнаю =(


Если от такого отказался
Andrey.L
Из опыта: Удобнее последнюю версию с комментарием держать вверху.
, то примерно так:
i := sql_txt (sql_text);
      FOR i IN REVERSE 1 .. sql_text.COUNT
      LOOP
         if substr(sql_text (i), 1, 10) like 'v.%.%.%.%' THEN
           v_code := v_code || sql_text (i);
           exit; 
         end if;
      END LOOP;
19 фев 10, 13:15    [8370595]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
hitmanzero
Member

Откуда:
Сообщений: 121
Так версия должна у меня содержаться в переменной v_ver а v_code это код объекта...
19 фев 10, 13:23    [8370676]     Ответить | Цитировать Сообщить модератору
 Re: Считывание версии из комментария  [new]
gpu
Member

Откуда: Dortmund
Сообщений: 371
Блог
hitmanzero,

Только в качестве альтернативы. У нас каждый пакет имеет процедуру version.
Разработчик обязан изменять содержимое каждый
раз когда пакет отсылается в производство.
Впрочем как и описание изменение в шапке.


/*
|| ****************************************************************************
||
|| version
|| =======
||
|| This procedures delivers the version information for building the version
|| view.
||
|| ****************************************************************************
*/
PROCEDURE version
   (version                  OUT VARCHAR2,
    build                    OUT VARCHAR2,
    lmod                     OUT DATE,
    name                     OUT VARCHAR2,
    text                     OUT VARCHAR2
   )
IS
BEGIN

   version := '6.3.7';        /* Version for which the package was changed */
   build   := '2';            /* change within one version */
   lmod    := to_date('02.11.09','DD.MM.YY'); /* date of last change */
   name    := 'GPU';           /* person that made last change */
   text    := 'CR-3673';    /* comment about change */

END;

Для тех поддержки даже формочка есть где можно посмотреть информацию о пакете.
П.С>
Все наши пакеты отсылаются в производство завраплеными.
19 фев 10, 18:32    [8373079]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Oracle Ответить