任务:
将包中的所有函数和过程移动到当前的Oracle模式。 (你可以想象一下你可能需要的情况,如果没有 - 把它当成挑战!)
问题:
如何在包装中阅读功能/程序“body”?我知道我可以使用all_source
,dba_source
和其他人来获取包体线,但这意味着我必须解析所有这些行/字符串 - 这应该是一种更简单的方法。不是吗?
答案 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%准确,则需要手动完成。
只是阅读源并尝试自动执行此操作时存在许多潜在问题。包变量,类型,初始化,安全性(每个函数都可以公开吗?),程序中的程序,重复的名称,包装的源等等。