Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL - Sự cố khi tạo hàm do người dùng xác định (UDF)

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phân biệt giữa 'không có hàng nào bị ảnh hưởng' và các hàng CẬP NHẬT thành công - đến cùng một giá trị (MySQL và PHP)

  2. Điền vào menu thả xuống HTML / PHP dựa trên lựa chọn thả xuống đầu tiên

  3. CHÈN vào chuỗi DateTime DB

  4. ImportError:Không có mô-đun nào có tên flask.ext.mysql

  5. Cách tăng tự động trong một tập hợp con của bảng MYSQL