如何在函数和程序包中读取函数和过程body / ddl?

时间:2011-11-09 21:33:01

标签: oracle plsql oracle-sqldeveloper

任务:

  

将包中的所有函数和过程移动到当前的Oracle模式。 (你可以想象一下你可能需要的情况,如果没有 - 把它当成挑战!)

问题:

如何在包装中阅读功能/程序“body”?我知道我可以使用all_sourcedba_source和其他人来获取包体线,但这意味着我必须解析所有这些行/字符串 - 这应该是一种更简单的方法。不是吗?

2 个答案:

答案 0 :(得分:3)

如果您有权访问Toad,那么这样做非常好。

另外,请查看DBMS_METADATA package,特别是GET_DDL程序。

希望有所帮助。

答案 1 :(得分:2)

为什么你需要这个?

您是否只是尝试执行函数和过程,就好像它们是在模式中定义的一样?如果是,那么invoker's rights可能会有所帮助。

你这样做是为了测试吗?如果是这样,请看一下这个答案:Is there a way to access private plsql procedures for testing purposes?(摘要:使用条件编译来选择性地使函数和过程公开)

如果您真的需要将软件包分解为功能和程序,那么如果您想要100%准确,则需要手动完成。

只是阅读源并尝试自动执行此操作时存在许多潜在问题。包变量,类型,初始化,安全性(每个函数都可以公开吗?),程序中的程序,重复的名称,包装的源等等。