Проблемът беше, че нямах супер привилегията, но ако премахна DEFINER от заявката, вече нямам нужда от тази привилегия.
От MySQL 5.0.3, CREATE PROCEDURE и CREATE FUNCTION изискват привилегията CREATE ROUTINE. Те може също да изискват привилегията SUPER, в зависимост от стойността на DEFINER, както е описано по-късно в този раздел. Ако двоичното регистриране е активирано, CREATE FUNCTION може да изисква SUPERprivilege, както е описано в раздел 18.6, „Бинарно регистриране на съхранените програми“.
Също така трябваше да зададете полето за разделители под текстовото поле на SQL.
Ето SQL заявката без израза DEFINER:
/*!50003 DROP FUNCTION IF EXISTS `f_calc_gst` */;;
/*!50003 SET SESSION SQL_MODE=""*/;;
/*!50003 CREATE*/ /*!50003 FUNCTION `f_calc_gst`(p_ht decimal(15,3), p_province varchar(2)) RETURNS varchar(255) CHARSET utf8
begin
declare res varchar(255);
declare v_gst decimal(15,3);
declare v_gst_formula varchar(255);
select GST, GST_formula
into v_gst, v_gst_formula
from taxes_periods
where NOW() between dt_debut and dt_fin
and id_province = p_province;
set v_gst_formula = replace(v_gst_formula, 'HT$', p_ht);
set v_gst_formula = replace(v_gst_formula, 'GST%', v_gst);
set res = concat('select round(', v_gst_formula, ',2) "gst"');
return res;
end */;;