2016-11-07 1 views
0

Так я написал:Oracle SQL Developer удаляет имя схемы из пакета

create or replace package body schema_name.package_name 

и как только я нажимаю компилировать приложение удаляет имя схемы заменив его пробелами, как это:

create or replace package body    package_name 

Кто-нибудь знает, как избавиться от этого раздражающего поведения?

ответ

1

Это не разработчик SQL. При создании пакета с помощью 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 (https://community.oracle.com/community/database/developer-tools/sql_developer) и посмотреть, может ли это быть будущим улучшением. –

+0

Я действительно мог бы, так как мы только что сравнили его с поведением TOAD, а в TOAD он работает так, как ожидалось. Если вы пишете имя схемы, оно остается там после повторной компиляции/повторного открытия. –