Heim  >  Artikel  >  Datenbank  >  Was sind die Erstellungs- und Ausführungsmethoden für benutzerdefinierte Funktionen in MySQL?

Was sind die Erstellungs- und Ausführungsmethoden für benutzerdefinierte Funktionen in MySQL?

WBOY
WBOYnach vorne
2023-04-17 16:07:031477Durchsuche

    Erstellung und Ausführung einer benutzerdefinierten MySQL-Funktion

    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');

    2. Dinge, die Sie beim Erstellen einer Funktion beachten sollten

    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 ;

    :

    1) Verwenden Sie DELIMITER//, um das Trennzeichen zu ändern

    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-DATEN

    Ich 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:

      1 DETERMINISTISCH Unsicher
    • 2 KEIN SQL Es gibt keine SQL-Anweisung, und die Daten werden natürlich nicht geändert
    • 3 LIES SQL-DATEN Es liest nur die Daten, natürlich werden die Daten dadurch nicht geändert lokale Variablen
    • Variablendefinition: Ich verwende „declare sname varchar(100) default ‘’;, um die lokale Variable sname zu definieren
    • Variablenverwendung:

    • Sie können „select Students.name“ in „sname“ von „students where“ verwenden Students.id=id; um der Variablen einen Wert zuzuweisen

      Sie können die set-Anweisung auch direkt verwenden, um Werte zuzuweisen, z. B. set sname=‘test’
    • 3. ;

      select find_student(3);

      Problem bei der Erstellung einer benutzerdefinierten MySQL-Funktion
    Fall

    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)

    bei com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)

    .. 35 weitere

    Dies liegt daran, dass ein Sicherheitsparameter nicht aktiviert ist erlaubt keine Funktionssynchronisierung. Wenn dieser Parameter aktiviert ist, ist die Erstellung erfolgreich.

    Ü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!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen