TASK:
将包中的所有函数和过程移动到当前Oracle模式中。(你可以想象你可能需要它的情况,如果不是——把它当作挑战!)
问题:
当它们在包中时,我如何读取函数/过程"体"?我知道我可以使用all_source
, dba_source
和其他方法来获得包体行,但这意味着我必须解析所有这些行/字符串-这应该是一种更简单的方法。不是吗?
如果您可以访问Toad,它可以很好地完成此操作。
同样,看看DBMS_METADATA package
,特别是GET_DDL
过程。
希望对你有帮助。
你到底为什么需要这个?
您是否只是试图执行在模式中定义的函数和过程?如果是这样,那么调用者的权利可能会有所帮助。
你这样做是为了测试吗?如果是这样,看看这个答案:是否有一种方法可以访问私有plsql过程用于测试目的?(总结:使用条件编译可选择性地将函数和过程公开)
如果你真的需要将包分解成函数和过程,如果你想要100%准确,你需要手动完成。
仅仅读取源代码并尝试自动执行有许多潜在的问题。那么包变量、类型、初始化、安全性(每个函数都可以是公共的吗?)、过程中的过程、重复的名称、包装的源代码等等呢?