DELIMITER $$ DROP FUNCTION IF EXISTS genPerson$$ CREATE FUNCTION genPerson(name varchar(20)) RETURNS varchar(50) BEGIN DECLARE str VARCHAR(50) DEFAULT ''; SET @tableName=name; SET str=CONCAT('create table ', @tableName,'(id int, name varchar(20));'); return str; END $$ DELIMITER ;
上の図の SQL に関する限り
(1) DELIMITER $ $ はターミネータを定義します。 MySQL のデフォルトのターミネータはセミコロンですが、関数本体でセミコロンを使用することもできます。競合を回避するには、追加のターミネータを定義する必要があります。 (2) DROP FUNCTION IF EXISTS genperson$$ 関数 genperson がすでに存在する場合は、それを削除します。 (3) CREATE FUNCTION は関数 genperson を作成します。関数のパラメータは name、戻り値は varchar(50) です。 (4) 関数本体は BEGIN と END の間に配置されます。 (5) DECLARE は変数を宣言します。str 型は varchar(50) で、デフォルト値は空です。 (6) CONCAT は複数の文字列を接続します。 (7) RETURN は連結された文字列 str を返します。#実行結果からわかる
Mysqlは関数を作成できませんエラーコード1418
この関数には、DETERMINISTIC、NO SQL、または READS SQL DATA のいずれもありません。宣言とバイナリ ログが有効になっている (安全性の低い log_bin_trust_function_creators 変数を使用することもできます) これは、関数作成関数がオンになっていないことを意味します。
解決策
show variables like '%func%'; ------------------------------------------- +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin_trust_function_creators | OFF | +---------------------------------+-------
2.オンにする
SET GLOBAL log_bin_trust_function_creators = 1;
3.再度確認
リーリー以上がMySQLで関数を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。