Перегрузка функций в Oracle PL/SQL
Статьи про Oracle -> Программирование
Перегрузка функций в Oracle PL/SQL
v:1.0 23.07.2010
Петрелевич Сергей
Хочу рассказать об интересной особенности перегрузки функций в Oracle PL/SQL.
Рассмотрим такой пример:
function GetChecksum(pKey in varchar2) return varchar2 is vChecksum DBMS_OBFUSCATION_TOOLKIT.varchar2_checksum; begin vChecksum:=DBMS_OBFUSCATION_TOOLKIT.MD5(pKey); return vChecksum; end;
При компиляции функции получим такую ошибку:
PLS-00307: too many declarations of 'MD5' match this call
Ошибка говорит о том, что в пакедже DBMS_OBFUSCATION_TOOLKIT несколько перегруженных функций MD5 и компилятор не может выбрать верную.
Смотрим пакедж DBMS_OBFUSCATION_TOOLKIT, видим:
FUNCTION MD5(input IN RAW)RETURN raw_checksum; FUNCTION MD5(input_string IN VARCHAR2)RETURN varchar2_checksum;
Компилятору надо дать какую-то подсказку, точно указать нужную функцию.
Для этого есть интересный трюк.
При вызове функции надо указать наименование параметра функции, значение которого требуется установить.
Т.е. мой пример должен выглядеть так:
function GetChecksum(pKey in varchar2) return varchar2 is vChecksum DBMS_OBFUSCATION_TOOLKIT.varchar2_checksum; begin vChecksum:=DBMS_OBFUSCATION_TOOLKIT.MD5(input_string=>pKey); return vChecksum; end;
После этого изменения пример работает как ожидается.
Метки: PL/SQL
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.