在phpMyAdmin中创build函数 – 错误:访问被拒绝,您需要这个操作的超级特权
我导入了一个MySQL数据库。 所有成功导入的表格,但不包括函数。 我可以执行SQL查询的唯一方法是通过phpMyAdmin或PHP脚本(无SSH)。
这里是一个导入函数的例子:
DELIMITER ;; /*!50003 DROP FUNCTION IF EXISTS `f_calc_gst` */;; /*!50003 SET SESSION SQL_MODE=""*/;; /*!50003 CREATE*/ /*!50020 DEFINER=`journal`@`%`*/ /*!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 */;;
如果我把这个代码粘贴到phpMyAdmin中,我得到这个错误: #1227 – 访问被拒绝; 你需要这个操作的SUPER特权
我试图删除“/ !50003”和“ /”取消注释的SQL,但我得到相同的错误消息。
我也试过不使用任何分隔符,并删除“DELIMITER ;;” 并得到这个错误:
DROP FUNCTION IF EXISTS f_calc_gst SET SESSION SQL_MODE = "" CREATE DEFINER = `journal`@`%` FUNCTION `f_calc_gst` ( p_ht DECIMAL( 15, 3 ) , p_province VARCHAR( 2 ) ) RETURNS VARCHAR( 255 ) CHARSET utf8 BEGIN declare res VARCHAR( 255 ) ; #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET SESSION SQL_MODE="" CREATE DEFINER=`journal`@`%` FUNCTION `f_calc_gst`(p_ht ' at line 2
还试过:
CREATE DEFINER=`journal`@`%` 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//
导致 :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
是在SQL,phpMyAdmin或与服务器的问题?
问题是我没有超级特权,但如果我从查询中删除DEFINER,我不再需要这个特权。
从MySQL 5.0.3开始,CREATE PROCEDURE和CREATE FUNCTION需要CREATE ROUTINE权限。 它们也可能需要SUPER权限,具体取决于DEFINER的值,如本节后面所述。 如果启用二进制日志logging,则CREATE FUNCTION可能需要SUPER权限,如第18.6节“stored procedures的二进制日志logging”中所述。
还必须在SQL文本框下设置分隔符字段。
这里是没有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 */;;