Angenommen, die Schülertabelle enthält zwei Felder, ID und Name, und die Funktion der Funktion besteht darin, einen Namen basierend auf der ID zu finden Tabelle und Einfügen von Daten
create table students(id int,name varchar(100)); insert into students(id,name) values(1,'annie'),(2,'bell'),(3,'danny');
DELIMITER // create function find_student(id int) returns varchar(100) READS SQL DATA begin declare sname varchar(100) default ''; select students.name into sname from students where students.id=id; return sname; end // DELIMITER ;
MySQLs Standard-Anweisungsendesymbol ist ein Semikolon , wird die aktuelle Anweisung automatisch ausgeführt. Da die Funktionsdefinition mehrere SQL-Anweisungen enthält, verwenden Sie DELIMITER //, um das Trennzeichen zunächst auf // zu setzen, und ändern Sie das Trennzeichen dann wieder in ein Semikolon, nachdem die Funktionserstellungsanweisung abgeschlossen ist.
2) LIES SQL-DATENIch habe diesen Satz noch nicht geschrieben, aber MySQL hat beim Erstellen einen Fehler gemeldet, der den Fehlercode 1418 anzeigt. Diese Funktion verfügt nicht über DETERMINISTISCH, KEIN SQL oder LEST SQL-DATEN in seiner Deklaration und die binäre Protokollierung ist aktiviert (vielleicht möchten Sie die weniger sichere Variable log_bin_trust_function_creators verwenden)
Ich habe online nachgesehen, was bedeutet, dass der Typ der MySQL-Funktion nicht deklariert ist:
MySQL hat Bin-Log aktiviert, wir müssen Geben Sie an, ob unsere Funktion welcher Typ ist:
Variablenverwendung:
select find_student(3);
Derzeit ist im Projekt ein Fehler beim Ausführen der Funktion aufgetreten, die MySQL erstellt hat. Die Fehlermeldung für die MySQL-Erstellungsfunktion lautet wie folgt:
Verursacht durch: Java .sql.SQLException: Diese Funktion enthält nichts von DETERMINISTIC, NO SQL oder READS SQL DATA in ihrer Deklaration und die binäre Protokollierung ist aktiviert (vielleicht möchten Sie *die weniger sichere Variable log_bin_trust_function_creators verwenden)
unter com.mysql.jdbc.SQLError .createSQLException(SQLError.java:965)bei com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO. java:3976) bei com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) bei com.mysql .jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
bei com.mysql.jdbc. readAllResults(MysqlIO.java:2373)bei com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2739)
unter com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482)unter com.mysql.ConnectionImpl.execSQL(ConnectionImpl.java:2440)
unter com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java). :845)Überprüfen Sie, ob es aktiviert ist:
show variables like '%func%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin_trust_function_creators | ON | +---------------------------------+-------+ 1 row in set (0.00 sec)
Wenn es aktiviert ist, bedeutet dies, dass es aktiviert ist.
set global log_bin_trust_function_creators = 1;
kann über diesen Befehl festgelegt werden, wird jedoch nach dem Neustart von MySQL ungültig.
Der letzte Schritt besteht darin, die MySQL-Datenbankkonfigurationsdatei zu ändern.
Konfigurieren Sie log_bin_trust_function_creators=1 in [mysqld] der Konfigurationsdatei /etc/my.cnf.
Starten Sie MySQL nach der Änderung neu.
Das obige ist der detaillierte Inhalt vonWas sind die Erstellungs- und Ausführungsmethoden für benutzerdefinierte Funktionen in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!