DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Правила вызова элементов пакета

На самом деле совершенно неважно знать, как запускается и исполняется пакет (в конце концов, это просто контейнер для элементов кода). Для пользователя важно знать, как запустить и использовать конкретные элементы, которые помещены в пакет.
Пакет является владельцем своих объектов точно так же, как таблица - владельцем своих столбцов. Чтобы обратиться к элементу, определенному в спецификации пакета, извне этого пакета, необходимо указать полное имя элемента, используя точечную нотацию. Давайте рассмотрим несколько примеров.
В данной спецификации пакета объявляются константа, исключение, курсор и несколько модулей:

Для ссылки на любой из этих объектов необходимо использовать имя пакета в качестве префикса перед именем объекта, а именно:

Подытоживая, можно сказать, что существуют два правила использования элементов пакета:
При ссылке извне (во внешней программе) на элемент, определенный в спецификации пакета, необходимо использовать точечную нотацию в формате имя_пакета.имя_элемента.
При ссылке внутри пакета (в спецификации или в теле) на элемент пакета указывать имя пакета не обязательно; PL/SQL автоматически интерпретирует ссылку как направленную на внутренний элемент пакета.
Данные пакета
Данные пакета представляют собой переменные и константы, которые определены на уровне пакета (то есть не внутри какой-то функции или процедуры пакета). Областью действия данных пакета является не какая-то одна программа, а весь пакет. Структуры данных пакета существуют (сохраняют свои значения) на протяжении всего сеанса, а не только во время исполнения одной программы.
Если данные пакета определены в теле пакета, то они сохраняют свои значения на протяжении сеанса, но доступ к ним разрешен только для элементов этого пакета (приватные данные).
Если данные пакета определены в спецификации пакета, то они сохраняют свои значения на протяжении сеанса и напрямую доступны (как на чтение, так и на запись) любой программе, обладающей привилегией EXECUTE для данного пакета (общие данные).
Если процедура пакета открывает курсор, то он остается открытым и доступным на протяжении всего сеанса. Нет необходимости в определении курсора в каждой программе. Один модуль может открывать курсор, а другой - выполнять выборку. Кроме того, переменные пакета могут передавать данные из одной транзакции в другую, так как переменные привязаны к сеансу, а не к какой-то определенной транзакции.
Выборка данных
Использованный в примере оператор SELECT INTO является примером неявного курсора и демонстрирует один из способов запроса данных из PL/SQL-блока. Пользователю доступны следующие способы выполнения запроса к базе данных:
Неявные курсоры
Простой оператор SELECT. ..INTO извлекает одну строку данных непосредственно в переменные локальной программы. Это удобный (и часто наиболее эффективный) способ доступа к данным, использование которого, однако, может приводить к необходимости повторного кодирования оператора SELECT (или похожих операторов) в нескольких местах программы.
 









jAntivirus