Как я могу прочитать функции и процедуры body / ddl, пока они находятся в пакете? - PullRequest
2 голосов
/ 10 ноября 2011

TASK:

Переместить все функции и процедуры в пакетах в текущую схему Oracle.(Вы можете представить себе случай, когда вам это может понадобиться, если нет - примите это как вызов!)

ВОПРОС:

Как я могу прочитатьфункции / процедуры "тела", пока они находятся в пакете?Я знаю, что могу использовать all_source, dba_source и другие, чтобы получить строки тела пакета, но это означает, что мне нужно проанализировать все эти строки / строки - это должен быть более простой способ.Не так ли?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Если у вас есть доступ к жабе, он делает это очень хорошо.

Кроме того, посмотрите на DBMS_METADATA package, в частности, на процедуру GET_DDL.

Надеюсь, это поможет.

2 голосов
/ 11 ноября 2011

Зачем вам это нужно?

Вы просто пытаетесь выполнить функции и процедуры, как если бы они были определены в вашей схеме?Если это так, тогда права вызывающего могут помочь.

Вы делаете это для тестирования?Если это так, взгляните на этот ответ: Есть ли способ получить доступ к закрытым процедурам plsql для целей тестирования? (резюме: используйте условную компиляцию, чтобы при желании сделать функции и процедуры общедоступными)

Есливам действительно нужно разбить пакеты на функции и процедуры, которые вам понадобятся делать вручную, если вы хотите быть на 100% точными.

Существует много потенциальных проблем с простым чтением исходного кода и попыткой сделать это.автоматически.Как насчет переменных пакета, типов, инициализации, безопасности (может ли каждая функция быть общедоступной?), Процедур внутри процедур, повторяющихся имен, переносимого источника и т. Д.

...