example - mysql user functions




Создайте функцию с необязательными аргументами в MySQL (2)

Я хочу создать функцию с необязательными аргументами в MySQL. Например, я хочу создать функцию, которая вычисляет среднее значение ее аргументов. Я создаю функцию из пяти аргументов, но когда пользователь передает в функцию только два аргумента, она все равно должна работать и возвращать среднее значение двух аргументов.


Другой подход заключается в передаче только одного «супер» параметра, который представляет собой строку с запятыми в ней, разделяющую реальные параметры. Затем процедура mysql может анализировать параметр super в отдельные реальные параметры. Пример:

create procedure procWithOneSuperParam(param1 varchar(500))
declare param2 varchar(100);
begin
 if LOCATE(',',param1) > 0 then
  .. param2=<extract the string after the ',' from param1> ..

Хотя это далеко не идеальное решение, вот как я решил необязательные параметры для нужной мне функции concat:

delimiter ||
create function safeConcat2(arg1 longtext, arg2 varchar(1023))
 returns longtext
 return safeConcat3(arg1, arg2, '');
||

create function safeConcat3(arg1 longtext, arg2 varchar(1023), arg3 varchar(1023))
 returns longtext
 return safeConcat4(arg1, arg2, arg3, '');
||

create function safeConcat4(arg1 longtext, arg2 varchar(1023), arg3 varchar(1023), arg4 varchar(1023))
returns longtext
  begin
      declare result longText;
      set result = concat(arg1, arg2, arg3, arg4);
      if( result is null) then
          set result=arg1;
      end if;
      return result;
  end
||

Примечание. Это означает, что вы должны вызывать метод, соответствующий количеству аргументов.





arguments