Внутри модуля процедуры и функции могут быть перегружены (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.
< Предыдущая | Следующая > |
---|