sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Problem med att skapa användardefinierad funktion (UDF)

Du måste ändra avgränsaren så att du kan använda ; inuti funktionen:

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 ;

I MySQL Command-Line Client (och många andra SQL-klienter) standardavgränsaren är ; . Så när du skriver din ursprungliga kod tror MySQL att det första kommandot slutar där den första ; hittas (på rad 5, som felmeddelandet anger), så får du ett fel eftersom detta inte är giltig SQL:

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

Om du ändrar avgränsaren till något annat identifierar MySQL hela kommandot (från CREATE FUNCTION till END och kör den. Voilá! Din funktion skapas. Slutligen, när du kör din funktion, fungerar koden bra eftersom funktionskroppen är sammansatt av flera satser med standardavgränsaren.



  1. Microsoft tillkännager SQL Server 2012 R2 och SQL Server 2012 R3!

  2. Att förstå Postgres radstorlekar

  3. Kan du inte använda en LIKE-fråga i en JDBC PreparedStatement?

  4. Konvertera decimaltid till timmar och minuter