sql >> Database >  >> RDS >> Mysql

MySQL - Problemen met het maken van een door de gebruiker gedefinieerde functie (UDF)

U moet het scheidingsteken wijzigen zodat u ; . kunt gebruiken binnen de functie:

DELIMITER $$

CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
  DECLARE i INT DEFAULT 1;
  DECLARE v_char VARCHAR(1);
  DECLARE v_parseStr VARCHAR(3000) DEFAULT '';
WHILE (i <= LENGTH(prm_strInput) )  DO
  SET v_char = SUBSTR(prm_strInput,i,1);
  IF v_char REGEXP '^[A-Za-z0-9]$' THEN
        SET v_parseStr = CONCAT(v_parseStr,v_char);  
  END IF;
  SET i = i + 1;
END WHILE;
RETURN trim(v_parseStr);
END
$$

DELIMITER ;

In MySQL Command-Line Client (en veel andere SQL-clients) het standaard scheidingsteken is ; . Dus wanneer u uw originele code typt, denkt MySQL dat de eerste opdracht eindigt waar de eerste ; wordt gevonden (op regel 5, zoals de foutmelding aangeeft), dus je krijgt een foutmelding omdat dit geen geldige SQL is:

CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
  DECLARE i INT DEFAULT 1;

Als u het scheidingsteken in iets anders verandert, identificeert MySQL het volledige commando (van CREATE FUNCTION tot END en voert het uit. Voila! Uw functie is gemaakt. Ten slotte, wanneer u uw functie uitvoert, werkt de code prima omdat de hoofdtekst van de functie is samengesteld uit verschillende instructies met behulp van het standaardscheidingsteken.



  1. Problemen met MySQL-replicatie oplossen:deel één

  2. Neo4j-browser

  3. Hoe de maandnaam van een datum in Oracle te krijgen

  4. Incrementele databasewijzigingen detecteren (Oracle naar MongoDB ETL)