2017-02-13 2 views
0

У меня есть большое количество пакетов Oracle. Я хотел бы написать запрос, который позволяет мне создать список того, где в этих пакетах можно найти несколько общих проблем.Как я могу получить DDL для «открытых» процедур пакета Oracle?

То, что я пытался до сих пор

  • Я знаю, что могу выделить аргументы пакета, запрашивая dba_arguments
  • Я знаю, что могу найти строки кода, запрашивая dba_source
  • Я знаю, что могу идентифицировать процедуры, которые появляются в спецификации пакета, путем запроса DBA_Procedures

Я могу присоединиться к первым двум наборам результатов вместе, но у меня возникли проблемы с присоединением к третьему набору результатов.

Как я могу получить DDL для процедур, которые появляются в спецификации данного пакета?

+1

dba_source это только строки кода, как они были в исходном файле, в то время как другие являются результатом compliation. Я думаю, что у вас будет большое затруднение с их присоединением, потому что вам в основном нужно скомпилировать источник, чтобы узнать имя и аргументы процедуры. –

+1

Не уверен, что я понимаю вопрос. Пожалуйста, покажите пример того, о чем вы говорите. Благодаря,. – OldProgrammer

+0

Зависит от того, что вы называете общедоступным (например, ссылаетесь на публичные синонимы или только на спецификацию пакета). В общем случае, если у вас есть SELECT_CATALOG_ROLE, вы можете вызвать функцию dbms_metadata.get_ddl. –

ответ

1

Попробуйте это:

select dbms_metadata.get_ddl ('PACKAGE', 'YOURPACKAGENAME', 'YOURSCHEMA') from dual; 
Смежные вопросы