Maison > base de données > tutoriel mysql > Quelles sont les méthodes de création et d'exécution de fonctions personnalisées dans Mysql

Quelles sont les méthodes de création et d'exécution de fonctions personnalisées dans Mysql

WBOY
Libérer: 2023-04-17 16:07:03
avant
1552 Les gens l'ont consulté

    Création et exécution d'une fonction personnalisée Mysql

    Supposons que la table des étudiants contient deux champs, id et name, et créez une fonction. La fonction est de trouver un nom en fonction de l'id

    1. table et insérez des données

    create table students(id int,name varchar(100));
    insert into students(id,name) values(1,'annie'),(2,'bell'),(3,'danny');
    Copier après la connexion

    2. Choses à noter lors de la création d'une fonction

    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 ;
    Copier après la connexion

     :

    1) Utilisez DELIMITER// pour modifier le délimiteur

    Le symbole de fin d'instruction par défaut de MySQL est un point-virgule. , il exécutera automatiquement l'instruction actuelle. Étant donné que la définition de fonction contient plusieurs instructions SQL, utilisez DELIMITER // Définissez d'abord le séparateur sur //, puis redéfinissez le séparateur en point-virgule une fois l'instruction de création de fonction terminée.

    2) LIT LES DONNÉES SQL

    Je n'ai pas écrit cette phrase auparavant, mais MySQL a signalé une erreur lors de sa création, demandant le code d'erreur : 1418. Cette fonction n'a aucun DETERMINISTIC, NO SQL ou READS SQL DATA dans sa déclaration et la journalisation binaire est activée (vous souhaiterez peut-être utiliser la variable log_bin_trust_function_creators la moins sûre)

    J'ai vérifié en ligne, ce qui signifie que le type de fonction mysql n'est pas déclaré :

    mysql a bin-log activé, nous devons précisez si notre fonction De quel type s'agit-il :

    • 1 DÉTERMINISTE Incertain

    • 2 PAS DE SQL Il n'y a pas d'instruction SQL, et bien sûr elle ne modifiera pas les données

    • 3 LIT LES DONNÉES SQL Il lit simplement les les données, et bien sûr, cela ne modifiera pas les données

    • 4 MODIFIE LES DONNÉES SQL Pour modifier les données

    • 5 CONTIENT SQL contient des instructions SQL

    • J'ai donc ajouté READS SQL DATA

    3) Utiliser des variables locales

    Définition de la variable : j'utilise declare sname varchar(100) default ‘’; pour définir la variable locale sname

    Utilisation de la variable :

    Vous pouvez utiliser select Students.name dans sname from Students. où étudiants.id=id; pour attribuer une valeur à la variable

    Vous pouvez également utiliser directement l'instruction set pour attribuer des valeurs, telles que set sname=‘test’

    3. );

    select find_student(3);
    Copier après la connexion

    Problème d'échec de création de fonction personnalisée MySQL

    Cas

    Actuellement, dans le projet, une erreur s'est produite lors de l'exécution de la fonction qui a créé mysql. Le message d'erreur pour la fonction de création mysql est le suivant :

    Causé par : java.sql.SQLException : cette fonction n'a aucun DETERMINISTIC, NO SQL ou READS SQL DATA dans sa déclaration et la journalisation binaire est activée (vous *pourriez* vouloir utiliser la variable log_bin_trust_function_creators la moins sûre)
    sur com.mysql.jdbc. SQLError.createSQLException(SQLError.java:965)

    sur com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO. java:3976)
    sur com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
    sur com. mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
    sur com.mysql.jdbc MysqlIO readAllResults(MysqlIO.java:2373)
    sur com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2739).
    sur com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482)
    sur com mysql.ConnectionImpl.execSQL(ConnectionImpl.java:2440)
    sur com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl. java:845)
    sur com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)
    .. 35 de plus

    Cela est dû au fait qu'un paramètre de sécurité n'est pas activé. ce qui ne permet pas la synchronisation des fonctions. Si ce paramètre est activé, la création sera réussie.

    Vérifiez s'il est activé :

    show variables like '%func%';
    +---------------------------------+-------+ 
    | Variable_name     | Value | 
    +---------------------------------+-------+ 
    | log_bin_trust_function_creators | ON | 
    +---------------------------------+-------+ 
    1 row in set (0.00 sec)
    Copier après la connexion

    S'il est activé, cela signifie qu'il est activé.

    set global log_bin_trust_function_creators = 1;
    Copier après la connexion

    peut être défini via cette commande, mais il deviendra invalide après le redémarrage de MySQL.

    La dernière étape consiste à modifier le fichier de configuration de la base de données MySQL

    Configurez log_bin_trust_function_creators=1 dans [mysqld] du fichier de configuration /etc/my.cnf

    Quelles sont les méthodes de création et d'exécution de fonctions personnalisées dans MysqlRedémarrez MySQL après modification.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal