DeepEdit!

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

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

Перегрузка модульных подпрограмм

Внутри модуля процедуры и функции могут быть перегружены (overloaded). Это означает, что может существовать несколько процедур или функций с одним и тем же именем, но с разными параметрами. Это очень удобно, так как позволяет выполнять одну и ту же операцию над объектами различных типов. Предположим, что нужно внести некоторого студента в состав од­ной из групп, указав либо идентификатор этого студента, либо его имя и фамилию. Это можно сделать, изменив ClassPackage следующим образом:
Перегрузка полезна тогда, когда одна и та же операция может быть выполнена над аргументами разных типов. Однако на перегрузку налага­ется ряд ограничений:
       Нельзя перегружать две подпрограммы, если их параметры отлича­ются только именами или видами. К примеру, следующие две проце­дуры не являются перегружаемыми:
P'ROCEDURE0verloadMe(p_TheParameterlN NUMBER); PROCEDURE0verloadMe(p_TheParameterOUT NUMBER);
    Нельзя перегружать две функции, отличающиеся лишь типами воз­вращаемых ими данных. К примеру, следующие две функции не яв­ляются перегружаемыми:
FUNCTION OverloadMeToo RETURN DATE; FUNCTION OverloadMeToo RETURN NUMBER;
•  Наконец, типы параметров перегружаемых функций должны при­надлежать различным семействам типов. Например, типы CHAR и VARCHAR2 входят в одно и то же семейство, поэтому не являются перегружаемыми следующие процедуры:
PROCEDURE OverloadChar(p_TheParameter IN   CHAR); PROCEDURE OverloadChar(p_TheParameter IN VARCHAR2);
Внимание
На самом деле компилятор PL/SQL разрешает создавать модули, в которые входят подпрограммы, нарушающие приведенные выше ограничения. Однако во время выполнения программы ссылки на эти подпрограммы не смогут быть реализованы и всегда будет выдаваться сообщение об ошибке PLS-307: Too many declarations of  'подпрограмма' match this call (этому вызову соответствует слишком много объявлений 'подпрограмма').

Объектные типы и перегрузка
Модульные подпрограммы можно перегружать и на основе пользовательских объектных типов. Для примера предположим, что создаются два объектных типа:


Более подробно об объектных типах и их использовании рассказыва­ется в главах 12 и 13.


 









jAntivirus