2016-11-07 72 views

回答

1

这不是SQL Developer做的。如果通过SQL * Plus和再查询dba_source(或全部/用户变量)创建的软件包,你会看到这个名字已经被删除,与create or replace文本一起:

SQL> create or replace package my_schema.package_name as 
    2 end; 
    3/

Package created. 

SQL> select text from sys.dba_source 
    2 where type = 'PACKAGE' and owner = 'MY_SCHEMA' and name = 'PACKAGE_NAME' 
    3 order by line; 

TEXT 
-------------------------------------------------------------------------------- 
package   package_name as 
end; 

2 rows selected. 

的所有者不是一部分包的来源,它被分开存储在数据字典(dba_objects.owner等)。解析器正在删除所有者,因为它不属于那里,作为数据库中实际存在的对象的一部分。作为纯粹的外部源代码(无论如何可能会这样做),并且您在源代码管理中拥有的版本可以保留它,如果它合适的话;但作为在该模式中定义的对象的一部分,它并不意味着什么。

您可能还注意到,如果您尝试从对象查看器创建另一个架构中的对象,它会告诉您模块已被重命名并尝试重新打开对象查看器。

但有趣的是,所有者名称被替换为空格(包括两个用于双引号,如果模式名称被引用)而不是完全删除。而且有趣的是,SQL Developer的对象查看器始终将create or replace置入 - 但也会注意到它始终包含or replace,即使您最初在您的代码中没有。如果没有,那么你当然不会重新编译它。

dbms_metadata.get_ddl软件包默认重新添加模式名称,并引用标识符;但也失去了额外的空格在此过程中:

SQL> select dbms_metadata.get_ddl('PACKAGE', 'PACKAGE_NAME', 'MY_SCHEMA') from dual; 

DBMS_METADATA.GET_DDL('PACKAGE','PACKAGE_NAME','MY_SCHEMA') 
-------------------------------------------------------------------------------- 

    CREATE OR REPLACE PACKAGE "MY_SCHEMA"."PACKAGE_NAME" as 
end; 


1 row selected. 

似乎没有被任何方式SQL Developer的对象视图来显示或虽然重新添加架构名称。

+0

即使我对结果感到失望,我非常感谢答案。 –

+0

@MladenOršolić - 您可以随时在[SQL Developer论坛](https://community.oracle.com/community/database/developer-tools/sql_developer)上提出它并查看它是否可能是未来的增强版。 –

+0

我实际上可能会,因为我们刚刚将它与TOAD行为进行了比较,并且在TOAD中它按预期工作。如果您编写模式名称,则在重新编译/重新打开后,它保持在那里。 –