Het probleem was dat ik het superrecht niet had, maar als ik de DEFINER uit de query verwijder, heb ik dit recht niet meer nodig.
Vanaf MySQL 5.0.3 is voor CREATE PROCEDURE en CREATE FUNCTION het CREATE ROUTINE-privilege vereist. Ze kunnen ook het SUPER-privilege vereisen, afhankelijk van de DEFINER-waarde, zoals later in deze sectie wordt beschreven. Als binaire logboekregistratie is ingeschakeld, vereist CREATE FUNCTION mogelijk het SUPERprivilege, zoals beschreven in Paragraaf 18.6, "Binaire logboekregistratie van opgeslagen programma's".
Moest ook het scheidingstekenveld onder het SQL-tekstvak instellen.
Hier is de SQL-query zonder de DEFINER-instructie:
/*!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 */;;