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