Oracle 当函数和过程位于包中时,如何读取它们的body/ddl?

Oracle 当函数和过程位于包中时,如何读取它们的body/ddl?,oracle,plsql,oracle-sqldeveloper,Oracle,Plsql,Oracle Sqldeveloper,任务: 将包中的所有函数和过程移动到当前Oracle架构。(你可以想象一个你可能需要的情况,如果不是的话——像挑战一样接受它!) 问题: 当函数/过程“body”在程序包中时,如何读取它们?我知道我可以使用all_source、dba_source和其他方法来获取包体行,但这意味着我必须解析所有这些行/字符串-这应该是一种更简单的方法。不是吗 如果你能接触到蟾蜍,它会做得很好 另外,请看一下DBMS\u元数据包,特别是GET\u DDL过程 希望能有帮助。你到底为什么需要这个 您是否只是试图执行

任务:

将包中的所有函数和过程移动到当前Oracle架构。(你可以想象一个你可能需要的情况,如果不是的话——像挑战一样接受它!)

问题:


当函数/过程“body”在程序包中时,如何读取它们?我知道我可以使用
all_source
dba_source
和其他方法来获取包体行,但这意味着我必须解析所有这些行/字符串-这应该是一种更简单的方法。不是吗

如果你能接触到蟾蜍,它会做得很好

另外,请看一下
DBMS\u元数据包
,特别是
GET\u DDL
过程


希望能有帮助。

你到底为什么需要这个

您是否只是试图执行函数和过程,就好像它们是在您的模式中定义的一样?如果是这样的话,也许会有帮助

你这样做是为了测试吗?如果是这样,请看下面的答案:(总结:使用条件编译可以选择性地公开函数和过程)

如果您真的需要将包分解为函数和过程,那么如果您想要100%准确,您需要手动完成


仅仅读取源代码并尝试自动执行有许多潜在问题。关于包变量、类型、初始化、安全性(每个函数都是公共的吗?)、过程中的过程、重复的名称、包装的源代码等等。

据我所知,你必须解析所有的源代码…@Radu:你说的“解析”是什么意思?您是否试图提取函数和过程并在包外创建它们?@jonearles是的!这是任务的主要部分。DBMS_METADATA with GET_DLL方法获取整个包体。我来看看另一个建议。谢谢嗨,乔恩厄尔斯!在寻找我的问题的答案时,我发现了这个——巫婆似乎正是我所需要的,但它并没有真正起作用。这项任务的思想是使所有这些过程和功能都可移植,因此当你想重新组织你的业务逻辑时,你没有其他方法来重新编译这类过程/功能(基本上是移动它们)-您可能希望这样做,而不是手动处理它们。我认为不会有任何通用方法来解决此问题。如果从预期的上下文中删除函数,则无法期望它正常工作。听起来你想让你的环境变得太有活力。说“这些是软件包,如果你不喜欢其中的所有功能,就不要使用它们”有什么错?但是,如果您仍然需要这样做,那么将函数名始终放在
结尾之后可能会有所帮助,以便于解析。