有没有办法在Oracle中的不同用户下的包中获取函数的DDL?我可以在'其他用户'下列出的用户之一下看到SQL Developer中的包。我已尝试使用dbms_metadata.get_ddl
功能:
SELECT dbms_metadata.get_ddl('PACKAGE', 'MY_PACKAGE', 'OTHER_USER') FROM DUAL
但是我收到以下错误:
ORA-31603:对象" MY_PACKAGE"在架构" OTHER_USER"
中找不到PACKAGE类型
对于get_ddl函数的第一个参数,我尝试了PACKAGE_SPEC和PACKAGE_BODY,但这似乎没什么帮助。
答案 0 :(得分:2)
不确定这是否对任何人都有帮助,这是一个老问题,但是我使用这个查询(来自Java)从服务器中删除所有程序和功能,以便我们可以将它们放在GIT中。我正在使用12C。
with x as
(
SELECT owner, object_name, object_type
FROM dba_objects
WHERE owner LIKE 'OWNER_NAME_HERE'
AND object_type IN ('PROCEDURE', 'FUNCTION')
)
SELECT DBMS_METADATA.get_ddl (x.object_type, x.object_name, x.owner) as ddlcode FROM x;
答案 1 :(得分:1)
您可以使用get_dll从程序包中提取代码,但应该提供正确类型的对象(例如,使用PACKAGE_BODY可以获取除标题之外的所有内容)
答案 2 :(得分:0)