powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как "распарсить" пакет?
25 сообщений из 49, страница 1 из 2
Как "распарсить" пакет?
    #32953158
Фотография Voyt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема философская

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

Как альтернатива - может есть какое нибудь инструментальное средство, позволяющее сделать сию операцию? С Oracle Designer такая штука не проходит в том виде как мне требуется.
...
Рейтинг: 0 / 0
Как "распарсить" пакет?
    #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
Как "распарсить" пакет?
    #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
Как "распарсить" пакет?
    #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
Как "распарсить" пакет?
    #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
Как "распарсить" пакет?
    #32953277
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voytнет такого типа 'PACKAGE_BODY'
И что я увижу? Пакет меня слабо интересует. Я ж текст функции FF из пакета PP желаю увидеть, а не весь пакетЗато есть "PACKAGE BODY". Его и увидите. А потом берёте текст тела пакета и парсите как вам заблагорассудится - вдоль и поперёк.
...
Рейтинг: 0 / 0
Как "распарсить" пакет?
    #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
Как "распарсить" пакет?
    #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
Как "распарсить" пакет?
    #32953303
val-demar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voyt
нет такого типа 'PACKAGE_BODY'

Чуток ошибся
...
Рейтинг: 0 / 0
Как "распарсить" пакет?
    #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
Как "распарсить" пакет?
    #32953455
val-demar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voyt

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

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

Ого #$%

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

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

Ого #$%

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

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


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

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

Предполагается сравнить ее текст с ранее имеющимся и увидеть какие функции в пакете были модифицированы и как это отразится на функциях системы. В идеале - на графической модели. Чтоб тестер пришел утром и не мучал всю систему хаотично - а тестил только функции, потенциально опасные для общества
А дерево зависимостей этой задаче не поможет?.. user_dependencies?..
...
Рейтинг: 0 / 0
Как "распарсить" пакет?
    #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
Как "распарсить" пакет?
    #32953554
Фотография Voyt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мильпардон представление v$99010 состоит из столбца username, в котором сидят имена пользователей
...
Рейтинг: 0 / 0
Как "распарсить" пакет?
    #32953572
cheshire_cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Очень выручили
...
Рейтинг: 0 / 0
Как "распарсить" пакет?
    #32953573
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если 9i, то есть еще пакет dbms_metadata, может покопаться с ним, типа

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

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

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


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