Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - Problem z tworzeniem funkcji zdefiniowanej przez użytkownika (UDF)

Musisz zmienić ogranicznik, aby móc używać ; wewnątrz funkcji:

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 ;

W kliencie wiersza poleceń MySQL (i wielu innych klientów SQL) domyślnym ogranicznikiem jest ; . Tak więc, kiedy wpisujesz swój oryginalny kod, MySQL myśli, że pierwsze polecenie kończy się w miejscu pierwszego ; zostanie znaleziony (w wierszu 5, zgodnie z komunikatem o błędzie), więc otrzymujesz błąd, ponieważ nie jest to prawidłowy SQL:

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

Jeśli zmienisz ogranicznik na cokolwiek innego, MySQL zidentyfikuje kompletne polecenie (od CREATE FUNCTION do END i uruchamia go. Voila! Twoja funkcja została utworzona. Wreszcie, kiedy uruchamiasz swoją funkcję, kod działa dobrze, ponieważ treść funkcji składa się z kilku instrukcji używających domyślnego ogranicznika.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak porównać tylko datę i rok w php codeigniter

  2. Błąd:Przestrzeń tabel dla tabeli xxx istnieje. Proszę ODRZUĆ obszar tabel przed IMPORTOWANIEM

  3. Jak mogę uruchomić i sprawdzić mój dziennik MySQL?

  4. Dlaczego ta funkcja przechowywana w MySQL daje inne wyniki niż wykonanie obliczeń w zapytaniu?

  5. jak uzyskać listę nazw schematów baz danych MySql za pomocą java JDBC