sql >> Database >  >> RDS >> Mysql

Functies maken in phpMyAdmin - Fout:toegang geweigerd, u hebt het superrecht voor deze bewerking nodig

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 */;;



  1. De Azure-kloof overbruggen:beheerde instanties

  2. Underscore werkt niet in orakelachtige clausule

  3. Inleiding tot MaxScale-beheer met maxctrl voor MariaDB Cluster

  4. SQL behalve