获取包中的函数的DDL

时间:2015-07-08 21:15:42

标签: oracle oracle-sqldeveloper

有没有办法在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,但这似乎没什么帮助。

3 个答案:

答案 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)

由于您在SQL Developer中,因此也可以使用DDL命令

enter image description here

clear screen
show user
ddl ords_demo.demo_pkg -- schema.package, gets the package and package body code

在SQLcl的命令行中也可以使用