Bạn phải thay đổi dấu phân cách để có thể sử dụng ;
bên trong hàm:
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 ;
Trong Máy khách dòng lệnh MySQL
(và nhiều máy khách SQL khác) dấu phân cách mặc định là ;
. Vì vậy, khi bạn nhập mã ban đầu của mình, MySQL nghĩ rằng lệnh đầu tiên kết thúc ở vị trí ;
đầu tiên được tìm thấy (ở dòng 5, như thông báo lỗi nêu rõ), do đó bạn gặp lỗi vì đây không phải là SQL hợp lệ:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Nếu bạn thay đổi dấu phân tách thành bất kỳ thứ gì khác, MySQL sẽ xác định lệnh hoàn chỉnh (từ CREATE FUNCTION
đến END
và chạy nó. Voilá! Chức năng của bạn đã được tạo. Cuối cùng, khi bạn chạy hàm của mình, mã sẽ chạy tốt vì thân hàm bao gồm một số câu lệnh sử dụng dấu phân cách mặc định.