Problemet var att jag inte hade superprivilegiet, men om jag tar bort DEFINER från frågan behöver jag inte det här privilegiet längre.
Från och med MySQL 5.0.3 kräver CREATE PROCEDURE och CREATE FUNCTION behörigheten CREATE ROUTINE. De kan också kräva SUPER-privilegiet, beroende på DEFINER-värdet, som beskrivs senare i det här avsnittet. Om binär loggning är aktiverad, kan CREATE FUNCTION kräva SUPER-privilegiet, som beskrivs i avsnitt 18.6, "Binär loggning av lagrade program".
Var också tvungen att ställa in avgränsningsfältet under SQL-textrutan.
Här är SQL-frågan utan DEFINER-satsen:
/*!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 */;;