समस्या यह थी कि मेरे पास सुपर विशेषाधिकार नहीं था, लेकिन अगर मैं क्वेरी से DEFINER को हटा देता हूं तो मुझे अब इस विशेषाधिकार की आवश्यकता नहीं है।
<ब्लॉकक्वॉट>MySQL 5.0.3 के अनुसार, CREATE PROCEDURE और CREATE FUNCTION के लिए CREATE ROUTINE विशेषाधिकार की आवश्यकता होती है। DEFINER मान के आधार पर उन्हें सुपर विशेषाधिकार की भी आवश्यकता हो सकती है, जैसा कि इस खंड में बाद में बताया गया है। यदि बाइनरी लॉगिंग सक्षम है, तो CREATE FUNCTION को सुपरविशेषाधिकार की आवश्यकता हो सकती है, जैसा कि खंड 18.6, "संग्रहीत प्रोग्राम की बाइनरी लॉगिंग" में वर्णित है।
एसक्यूएल टेक्स्ट बॉक्स के तहत डिलीमीटर फ़ील्ड भी सेट करना था।
यहाँ DEFINER कथन के बिना SQL क्वेरी है:
/*!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 */;;