2013-10-01 1 views
3

У меня есть система, в которой я разделил свою функциональность на несколько разных пакетов. В настоящее время я звоню функции и процедуры, используя точечную нотацию packagename.objectПсевдоним или синоним для пакета в PL/SQL

Некоторые из моих имен пакетов (из-за компании стандартов кодирования) довольно долго

Могу ли я создать псевдоним/синоним для пакета, чтобы сократить мой код?

т.е. вместо pkge_member_utilities.CreateMember, я мог бы создать синоним/псевдоним «Util» для пакета, а затем использовать util.CreateMember на протяжении всего моего кода

Я прочитал на документации для CREATE SYNONYM, но это сбивает с толку, поскольку это, кажется, используется против выполнения немедленным, тогда как я хочу, чтобы ссылаться на синоним в моем коде

Опять извинения за расплывчатой ​​терминологии, как я иду на это с Java фоне

Многие спасибо за ваше время

Майк

+0

похоже, что вы сознательно собираетесь нарушать стандарты кодирования вашей компании, не так ли? –

+0

@beherenow Я? Если я дам пакет правильному имени, ссылаясь на него псевдонимом внутри кода, не будет действительно нарушать стандарты/лучшие практики, не так ли? – Mike

+2

Не имеет смысла называть объект в соответствии с соглашением только для его переноса в синониме и видеть фактическое имя только в браузере объектов, не так ли? Почему бы просто назвать его 'util' и не сделать с ним?) Одна точка любого данного соглашения заключается в том, чтобы обеспечить читаемость кода - вы добавляете что-либо к удобочитаемости, запутывая фактическое имя подпрограммы и в основном представляя свою собственную конвенцию, что означает «util = pkge_member_utilites», на верхней части существующей?) –

ответ

2

Хотя я согласен с комментариями выше, что в основном это попытка победить стандарты. Однако иногда стандарты ужасны, и до тех пор, пока существуют подходящие модульные тесты, в правильной ситуации, какой вред?

create or replace package long_package_name as 
    function give_me_zero return number; 
end; 
/

create or replace package body long_package_name as 
    function give_me_zero return number is begin return 0; end; 
end; 
/

create or replace synonym pkg for long_package_name; 

-- either works the same 
select long_package_name.give_me_zero from dual; 
select pkg.give_me_zero from dual; 
+0

Вы спрашиваете, какой вред? _ Я спрашиваю: что такое выигрыш? _ – user272735

+2

@ user272735 - Усиление? Возможно читаемость кода. Что делать, если менеджер по развитию, не получивший его Executive MBA, решает, что все пакеты должны быть названы pkg_ {module #} _ {customer #}, что приводит к пакету, который предназначен для API заказа клиента с именем PKG_3498_U3450S6 вместо SALES_ORDER_API. И у вас есть код, который широко использует PKG_3498_U3450S6. Еще один возможный выигрыш: что, если какой-нибудь окунят использует имена, чувствительные к регистру, для имен пакетов, и вы хотите их сенсибилизировать? –

+0

Я бы сказал, что выигрыш там, где все становится немного сложнее. Например, если у меня есть пакет [email protected], и у него есть процедуры myProc1, myProc2, было бы неплохо сделать эквивалент импорта Java в верхней части пакета.Это означало бы, что в этом пакете я мог бы ссылаться на myProc1 и myProc2, не указывая их с помощью [email protected] или создавая синоним. – Dave

-1

create public synonym util for <owner>.pkge_member_utilities;

+0

Где я могу разместить это объявление, чтобы использовать его внутри тела пакета? – Mike

+0

@Mike просто выполняется через sqlplus или любой редактор. – Shann

+1

@Mike вы не кладете его в тело упаковки. синоним - это отдельный объект базы данных, вы создаете его так же, как вы создаете пакет –

Смежные вопросы