Mysql
 sql >> Base de données >  >> RDS >> Mysql

Création de fonctions dans phpMyAdmin - Erreur :accès refusé, vous avez besoin du super privilège pour cette opération

Le problème était que je n'avais pas le super privilège mais si je supprime le DEFINER de la requête, je n'ai plus besoin de ce privilège.

Depuis MySQL 5.0.3, CREATE PROCEDURE et CREATE FUNCTION nécessitent le privilège CREATE ROUTINE. Ils peuvent également nécessiter le privilège SUPER, en fonction de la valeur DEFINER, comme décrit plus loin dans cette section. Si la journalisation binaire est activée, CREATE FUNCTION peut nécessiter le privilège SUPER, comme décrit dans la Section 18.6, « Journalisation binaire des programmes stockés ».

Il fallait également définir le champ délimiteur sous la zone de texte SQL.

Voici la requête SQL sans l'instruction 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 */;;