Vấn đề là tôi không có siêu đặc quyền nhưng nếu tôi xóa DEFINER khỏi truy vấn, tôi không cần đặc quyền này nữa.
Kể từ MySQL 5.0.3, TẠO THỦ TỤC và TẠO CHỨC NĂNG yêu cầu đặc quyền TẠO ĐƯỜNG TUYẾN. Họ cũng có thể yêu cầu đặc quyền SUPER, tùy thuộc vào giá trị DEFINER, như được mô tả sau trong phần này. Nếu tính năng ghi nhật ký nhị phân được bật, CHỨC NĂNG TẠO có thể yêu cầu đặc quyền, như được mô tả trong Phần 18.6, “Ghi nhật ký nhị phân của chương trình lưu trữ”.
Cũng phải đặt trường dấu phân cách trong hộp văn bản SQL.
Đây là Truy vấn SQL không có câu lệnh 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 */;;