5
Перегрузка
Несколько подпрограмм с одним и тем же именем
подпрограмма однозначно определяется сигнатурой —
именем и входными параметрами
тип возвращаемого значения и выходные параметры игнорируются
подходящая подпрограмма выбирается во время выполнения
в зависимости от фактических параметров
Команда CREATE OR REPLACE
при несовпадении типов входных параметров создаст новую
перегруженную подпрограмму
при совпадении — изменит существующую подпрограмму,
но нельзя поменять тип подпрограммы, тип возвращаемого значения,
типы OUT-параметров
Перегрузка — это возможность использования одного и того же имени
для нескольких подпрограмм, отличающихся типами параметров IN
и INOUT.
Сигнатура подпрограммы — ее имя и типы входных параметров.
При вызове PostgreSQL находит подпрограмму, соответствующую
сигнатуре. Возможны ситуации, когда подходящую подпрограмму
невозможно определить однозначно; в таком случае во время
выполнения возникнет ошибка.
Однако в сигнатуру, в частности, не входят:
●
тип подпрограммы (процедура или функция);
●
типы параметров OUT;
●
тип возвращаемого значения.
Перегрузку надо учитывать, выполняя команду CREATE OR REPLACE
(FUNCTION или PROCEDURE). Если сигнатура не совпадает
ни с одной из существующих, будет создана новая перегруженная
подпрограмма, а при совпадении — изменена существующая.
В последнем случае не разрешается изменять тип подпрограммы, тип
OUT-параметров или тип возвращаемого значения, однако можно
изменить язык и другие свойства. Поэтому иногда приходится удалять
подпрограмму и создавать ее заново, в этом случае потребуется также
удалить зависящие от нее объекты: другие подпрограммы,
представления, триггеры и т. п. (DROP ROUTINE ... CASCADE).