Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL - Проблем със създаването на дефинирана от потребителя функция (UDF)

Трябва да промените разделителя, за да можете да използвате ; вътре във функцията:

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 ;

В MySQL клиент на командния ред (и много други SQL клиенти) разделителят по подразбиране е ; . Така че, когато въвеждате оригиналния си код, MySQL смята, че първата команда завършва там, където първата ; е намерен (на ред 5, както гласи съобщението за грешка), по този начин получавате грешка, защото това не е валиден SQL:

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

Ако промените разделителя на нещо друго, MySQL идентифицира пълната команда (от CREATE FUNCTION до END и го управлява. Voilá! Вашата функция е създадена. И накрая, когато стартирате функцията си, кодът работи добре, защото тялото на функцията се състои от няколко израза, използващи разделителя по подразбиране.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Симулиране на групи за улавяне на регулярни изрази в mysql

  2. Използвате слоя на база данни на Django извън Django?

  3. mysql - АКТУАЛИЗИРАНЕ на ред въз основа на други редове

  4. MySQL пермутация

  5. PHP Проверете дали низът съдържа буква