Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как "распарсить" пакет? / 25 сообщений из 49, страница 1 из 2
10.03.2005, 12:54:22
    #32953158
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Проблема философская

Есть пакет в БД. Можно получить список функций/процедур из пакета и входные и выходные параметры - с этим проблем не возникло.
Хочется получить содержимое тела функции/процедуры, находящейся в пакете. Особо идеально было бы одним оператором select.

Как альтернатива - может есть какое нибудь инструментальное средство, позволяющее сделать сию операцию? С Oracle Designer такая штука не проходит в том виде как мне требуется.
...
Рейтинг: 0 / 0
10.03.2005, 13:02:57
    #32953187
Q
Q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Код: plaintext
1.
2.
3.
4.
5.
select text
 from dba_source
 where owner = '<Владелец>'
   and name = '<Имя>'
   and type like 'PACKAGE%'
 order by type, line   
...
Рейтинг: 0 / 0
10.03.2005, 13:05:12
    #32953199
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Q
Код: plaintext
1.
2.
3.
4.
5.
select text
 from dba_source
 where owner = '<Владелец>'
   and name = '<Имя>'
   and type like 'PACKAGE%'
 order by type, line   


И что я увижу? Пакет меня слабо интересует. Я ж текст функции FF из пакета PP желаю увидеть, а не весь пакет
...
Рейтинг: 0 / 0
10.03.2005, 13:22:43
    #32953258
val-demar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Код: plaintext
1.
2.
3.
4.
select text 
  from dba_source
 where owner like 'SOME_OWNER'
   and TYPE  like 'PACKAGE_BODY'
...
Рейтинг: 0 / 0
10.03.2005, 13:26:21
    #32953268
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
val-demar
Код: plaintext
1.
2.
3.
4.
select text 
  from dba_source
 where owner like 'SOME_OWNER'
   and TYPE  like 'PACKAGE_BODY'


нет такого типа 'PACKAGE_BODY'
И что я увижу? Пакет меня слабо интересует. Я ж текст функции FF из пакета PP желаю увидеть, а не весь пакет
...
Рейтинг: 0 / 0
10.03.2005, 13:29:23
    #32953277
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Voytнет такого типа 'PACKAGE_BODY'
И что я увижу? Пакет меня слабо интересует. Я ж текст функции FF из пакета PP желаю увидеть, а не весь пакетЗато есть "PACKAGE BODY". Его и увидите. А потом берёте текст тела пакета и парсите как вам заблагорассудится - вдоль и поперёк.
...
Рейтинг: 0 / 0
10.03.2005, 13:34:03
    #32953289
val-demar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
VoytЯ ж текст функции FF из пакета PP желаю увидеть, а не весь пакет
Я б искал так
Код: plaintext
1.
2.
3.
4.
 and line >=
 (select line from dba_source where upper(text) like 'PROCEDURE PROC_NAME'
 and line <=
 (select line from dba_source where upper(text) like 'END PROC_NAME')     
...
Рейтинг: 0 / 0
10.03.2005, 13:35:05
    #32953296
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Павел Воронцов Voytнет такого типа 'PACKAGE_BODY'
И что я увижу? Пакет меня слабо интересует. Я ж текст функции FF из пакета PP желаю увидеть, а не весь пакетЗато есть "PACKAGE BODY". Его и увидите. А потом берёте текст тела пакета и парсите как вам заблагорассудится - вдоль и поперёк.

Собственно суть вопроса и состоит в том как его распарсить вдоль и поперек Условно говоря хотелось бы иметь select подобного вида

select
text
from
"чего-то"
where
owner='овнер' and
package_name='имя пакета' and
module_type='FUNCTION' and
module_name='имя функции в ентом пакете';

Сильно нужно
...
Рейтинг: 0 / 0
10.03.2005, 13:36:17
    #32953303
val-demar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Voyt
нет такого типа 'PACKAGE_BODY'

Чуток ошибся
...
Рейтинг: 0 / 0
10.03.2005, 13:51:28
    #32953346
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
val-demar
Я б искал так
Код: plaintext
1.
2.
3.
4.
 and line >=
 (select line from dba_source where upper(text) like 'PROCEDURE PROC_NAME'
 and line <=
 (select line from dba_source where upper(text) like 'END PROC_NAME')     


Только моих разработчиков сложно заставить писать имя процедуры в одной строке со словом "PROCEDURE" - их вообще невозможно заставить что либо делать по какому то правилу.

Сия задача возникла из-за того, что группа не вмеру активных и творчески одухотворенных разрабочиков генерируют новые пакеты и изменяют старые со скоростью секретаря-референта. Причем документировать работу считают занятием постыдным и недостойным. В результате бедные тестеры приходя утром на работу начинают перетестировать систему заново. Как результат - все что работало вчера к 6 вечера - сегдоня к 9 утра работает не так или совсем не работает.

Вот и возникло желание помочь людям хоть как то Отзовитесь!!!
...
Рейтинг: 0 / 0
10.03.2005, 14:19:43
    #32953455
val-demar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Voyt

Только моих разработчиков сложно заставить писать имя процедуры в одной строке со словом "PROCEDURE" - их вообще невозможно заставить что либо делать по какому то правилу.

Причем документировать работу считают занятием постыдным и недостойным.

Ого #$%

А заставить писать имя процедуры после end'a реально ?
Тогда можно будет выбрать номер строки с первым и следующим совпадением в тексте имени процедуры.
...
Рейтинг: 0 / 0
10.03.2005, 14:21:45
    #32953461
HX
HX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Voytup
А что хочется получить?.. отпарсить и что вытащить?..
...
Рейтинг: 0 / 0
10.03.2005, 14:25:50
    #32953486
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
HX Voytup
А что хочется получить?.. отпарсить и что вытащить?..

В двух словах - из пакета текст функции, зная имя владельца пакета, имя пакета и имя функции.
...
Рейтинг: 0 / 0
10.03.2005, 14:28:09
    #32953494
HX
HX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
А что предполагается делать дальше с текстом ф-ии?..
...
Рейтинг: 0 / 0
10.03.2005, 14:29:37
    #32953501
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
val-demar

Ого #$%

А заставить писать имя процедуры после end'a реально ?
Тогда можно будет выбрать номер строки с первым и следующим совпадением в тексте имени процедуры.

Вот и "ого" Нет, не реально заставить вообще, посему приходится выкручиваться "as is". Устроит вариант любой - временные характеристики для парсинга не важны - пусть хоть час выковыриывает Хотя за час может многое в системе измениться...
...
Рейтинг: 0 / 0
10.03.2005, 14:35:47
    #32953525
cheshire_cat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
VoytЕсть пакет в БД. Можно получить список функций/процедур из пакета и входные и выходные параметры - с этим проблем не возникло.


А как это сделать?
...
Рейтинг: 0 / 0
10.03.2005, 14:37:36
    #32953535
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
HXА что предполагается делать дальше с текстом ф-ии?..

Предполагается сравнить ее текст с ранее имеющимся и увидеть какие функции в пакете были модифицированы и как это отразится на функциях системы. В идеале - на графической модели. Чтоб тестер пришел утром и не мучал всю систему хаотично - а тестил только функции, потенциально опасные для общества
...
Рейтинг: 0 / 0
10.03.2005, 14:39:01
    #32953543
HX
HX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Voyt HXА что предполагается делать дальше с текстом ф-ии?..

Предполагается сравнить ее текст с ранее имеющимся и увидеть какие функции в пакете были модифицированы и как это отразится на функциях системы. В идеале - на графической модели. Чтоб тестер пришел утром и не мучал всю систему хаотично - а тестил только функции, потенциально опасные для общества
А дерево зависимостей этой задаче не поможет?.. user_dependencies?..
...
Рейтинг: 0 / 0
10.03.2005, 14:41:02
    #32953548
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
cheshire_cat VoytЕсть пакет в БД. Можно получить список функций/процедур из пакета и входные и выходные параметры - с этим проблем не возникло.


А как это сделать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
CREATE OR REPLACE VIEW V$ 99012  AS select
     t1.object_id,
	 t1.owner,
	 t1.package_name||decode(T1.package_name,null,null,'.')||T1.object_name as module_name,
     trim(T1.package_name) as package_name,
	 T1.object_name,
	 T1.argument_name,
	 (select 
	        DECODE(min(position), 0 ,'FUNCTION','PROCEDURE') 
	  from 
	        all_arguments 
	  where 
	        owner in (select username from v$ 99010 ) AND 
			object_id=T1.object_id AND
	        object_name=T1.object_name and
		    nvl(overload, 0 )=nvl(T1.overload, 0 )
	  ) as MODULE_TYPE,
	  T1.data_type,
	  T1.in_out,
	  T1.position,
	  decode(T1.overload,null, 1 ,T1.overload) as overload,
	  t1.sequence,
	  t1.data_level,
	  t1.default_value,
	  t1.default_length,
	  t1.data_length,
	  t1.data_precision,
	  t1.data_scale,
	  t1.type_owner,
	  t1.type_name,
	  t1.type_subname,
	  t1.type_link,
	  t1.pls_type,
	  t1.char_length,
	  t1.char_used
from
     all_arguments T1
where owner in ('СИС НАПРИМЕР')

...
Рейтинг: 0 / 0
10.03.2005, 14:42:57
    #32953554
Voyt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Мильпардон представление v$99010 состоит из столбца username, в котором сидят имена пользователей
...
Рейтинг: 0 / 0
10.03.2005, 14:46:46
    #32953572
cheshire_cat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Спасибо! Очень выручили
...
Рейтинг: 0 / 0
10.03.2005, 14:47:06
    #32953573
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Если 9i, то есть еще пакет dbms_metadata, может покопаться с ним, типа

Код: plaintext
1.
2.
3.
-- (тип объекта, имя объекта, хозяин)
SELECT dbms_metadata.get_ddl('PACKAGE', 'PKG1', 'HR2') AS Ddl 
FROM dual

PS Но, конечно, не в графическом виде
...
Рейтинг: 0 / 0
10.03.2005, 14:47:40
    #32953575
Coaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Изобретаем велосипед?)))))))))
Очертания уже похожи, только вот колеса пока треугольные)))

Объясните тупому - ПОЧЕМУ?!!! НУ ПОЧЕМУ?! Вы не хотите стандартные средства использовать? Ну не пользуетесь вы VCS'ами, ну хотя бы взять навигатор или тоад или другую софтину различную и сделать compare . . .
...
Рейтинг: 0 / 0
10.03.2005, 14:51:44
    #32953593
Kettler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
Для парсинга обычно используют регулярные выражения.
В 9ке OWA_PATTERN или можно Java classов подгрузить.
Имхо без них никак :)
...
Рейтинг: 0 / 0
10.03.2005, 14:54:10
    #32953606
slywebmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "распарсить" пакет?
есть еще Oracle Change Management Pack для сравнения различных объектов на разных бд
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как "распарсить" пакет? / 25 сообщений из 49, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]