Anda harus mengubah pembatas sehingga Anda dapat menggunakan ;
di dalam fungsi:
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 ;
Di Klien Baris Perintah MySQL
(dan banyak klien SQL lainnya) pembatas default adalah ;
. Jadi, ketika Anda mengetik kode asli Anda, MySQL menganggap perintah pertama berakhir di mana ;
pertama ditemukan (pada baris 5, seperti yang dinyatakan oleh pesan kesalahan), sehingga Anda mendapatkan kesalahan karena ini bukan SQL yang valid:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Jika Anda mengubah pembatas menjadi apa pun, MySQL mengidentifikasi perintah lengkap (dari CREATE FUNCTION
ke END
dan menjalankannya. Voila! Fungsi Anda dibuat. Terakhir, saat Anda menjalankan fungsi, kode berjalan dengan baik karena badan fungsi terdiri dari beberapa pernyataan menggunakan pembatas default.