2016-11-07 101 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中它按預期工作。如果您編寫模式名稱,則在重新編譯/重新打開後,它保持在那裏。 –