Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL - Masalah dengan membuat fungsi yang ditentukan pengguna (UDF)

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengisi dropdown kedua berdasarkan pilihan dropdown pertama menggunakan jQuery/AJAX dan PHP/MySQL?

  2. PHP mySQL - Bisakah Anda mengembalikan array terkait dengan indeks angka?

  3. Memilih rentang tanggal MySQL dengan date_format

  4. Buat Tabel Baru dengan Memilih Data dari Tabel Lain dengan CREATE TABLE AS

  5. Cara mengulang semua tabel pada database untuk memperbarui kolom