2016-10-30 6 views
0

Мы работаем с пакетами в PL/SQL, и я хочу знать, можем ли мы работать аналогичным образом. Например, Java, где вы можете создать Пакет в другой, например, каталоги. Например:Организация пакетов в PL/SQL

myapplication.account.balance 

Таким образом, мы можем работать с пакетами с тем же именем, но в разных подпакетах.

ответ

5

Нет такой вещи, как «вложенные пакеты».

Один из способов иметь «вложенные пакеты» - это просто ввести свой собственный разделитель пакетов, например, $. Но опять же, вы нажмете ограничение на 30 символов, которое применяется к любому типу имени объекта, очень быстро.

Мой совет - не пытаться эмулировать «вложенные пакеты» в Oracle. Просто придерживайтесь плоских пакетов, дайте им правильные имена и, может быть, просто дайте им префикс, например PAC_, чтобы избежать конфликтов с другими объектами, потому что Oracle не разделяет типы объектов на пространства имен Некоторые типы объектов, такие как пакеты и таблицы, используют одинаковые пространство имен (см. Database Object Names and Qualifiers).

+2

Это не отнимает у вас точку, но Oracle делает отдельные типы объектов в пространствах имен; [см. правило 8 именования объектов] (https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements008.htm#SQLRF00223). –

+1

@AlexPoole, исправлено. Спасибо что подметил это. – Brian

1

Вы можете разместить свои пакеты в разных SCHEMA. Это не действительно «вложенные пакеты», но это может помочь вам, если вы хотите работать с разными пакетами, которые имеют одинаковые имена.

Например, вы можете создать две схемы research_department и production_department. В каждой схеме вы можете создавать пакеты с таким же именем, например. accountant_service, и в каждом пакете мы можем создать процедуры calc_salary().

Затем вы можете вызывать процедуры, используя имя схемы: research_department.accountant_service.calc_salary() production_department.accountant_service.calc_salary()

Или вы можете использовать только пакет и имя процедуры: accountant_service.calc_salary(). В этом случае будет выполняться процедура из текущей схемы

Или вы можете использовать только название процедуры (внутри упаковки): calc_salary(). В этом случае будет выполнена процедура из текущего пакета.

0

В нашей компании мы используем разные схемы, префиксы и постфикс. У нас есть более 100 пакетов, и он работает очень хорошо.

например. myappl1.acnt_balance