精华内容
下载资源
问答
  • mysql创建函数

    2021-11-29 15:46:29
    函数 一、创建语法 create function 函数名()

    函数

    一、创建语法

    create function 函数名(参数列表) returns 返回类型
    begin
    函数体
    end

    注意:
    1.参数列表 包含两部分:
    参数名、参数类型
    2.函数体:肯定会有return语句,如果没有会报错
    如果return语句没有放在函数体的最后不会报错,但不建议
    return 值;
    3.函数体中仅有一句话,则可以省略begin end
    4.使用delimiter 语句设置结束标记
    delimiter $;

    二、调用语法

    select 函数名(参数列表);
    1.无参有返回
    1.案例:返回公司的员工个数
    create function myf1() returns int
    begin
    declare c int defeault 0; //定义变量
    select count(*) into c //赋值
    from employees;
    return c;
    end $
    调用:
    select myf1() $
    2.有参有返回
    案例1:根据员工姓名返回他的工资
    create funtion myf2(empname varchar(20)) return double
    begin
    set @sal = 0; //定义用户变量
    select salary into @sal //赋值
    from employees
    where last_name = empname;
    return @sal;
    end $
    调用:
    select myf2(‘kochar’)$
    案例2:根据部门名,返回部门的平均工资
    create function myf3(deptname varchar(20)) return double
    begin
    declare sal double ;
    sekect avg(salary) into sal
    from employees e
    join department d on e.department_id = d.department_id
    where d.department_name = deptname;
    return sal;
    end $
    select myf3(‘IT’) $

    查看函数

    show create function myf3;

    删除函数

    drop function myf3;

    案例

    1.创建函数传入两个float,返回两者之和
    create function test_fun1(num1 float,num2 float) return float
    begin
    declare sum float default 0; //定义变量类型
    set sum=num1+num2;
    return sum;
    end $
    调用:
    select test_fun1(1,2) $

    展开全文
  • 在使用MySQL数据库时,有时会遇到MySQL函数...案例一:目前在项目中,执行创建mysql的函数出错,mysql 创建函数出错信息如下:Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s)...

    在使用MySQL数据库时,有时会遇到MySQL函数不能创建的情况。下面就教您一个解决MySQL函数不能创建问题的方法,供您借鉴参考。希望能帮助到大家。

    案例一:

    目前在项目中,执行创建mysql的函数出错,

    mysql 创建函数出错信息如下:

    Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation

    首先检查创建函数的功能是否开启,检查是否开启创建功能的SQL如下:-- 查看是否开启创建函数的功能

    show variables like '%func%';

    -- 开启创建函数的功能

    set global log_bin_trust_function_creators = 1;

    执行完SQL之后发现已经开启了,随检查自己的SQL是否写错(因为SQL是别人给的,在别人环境没问题,在自己的环境就有可能)。

    突然发现了确实是SQL出现问题,由于他创建的SQL有指定用户,所以导致出现问题,以下是他的SQL:DROP FUNCTION IF EXISTS `nextval`;

    DELIMITER ;;

    CREATE DEFINER=`devop`@`%` FUNCTION `nextval`(`seq_name` VARCHAR(50)) RETURNS varchar(20) CHARSET utf8

    BEGIN

    DECLARE seq_max BIGINT(20);

    UPDATE sequenceconftable SET `max` = `max` + NEXT WHERE NAME = seq_name;

    SELECT `max` INTO seq_max FROM sequenceconftable WHERE NAME = seq_name ;

    RETURN seq_max;

    END

    ;;

    DELIMITER ;

    由于CREATE_FUNCTION规范,可以发现就是DEFINER这个参数是可以指定数据库用户的,但是自己的库却不是这个用户,所以导致问题。

    目前问题已经解决。

    -EOF-

    案例二:

    在MySQL创建用户自定义函数时,报以下错误:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

    这是因为有一个安全参数没有开启,log_bin_trust_function_creators 默认为0,是不允许function的同步的,开启这个参数,就可以创建成功了。mysql> show variables like '%fun%';

    +---------------------------------+-------+

    | Variable_name | Value |

    +---------------------------------+-------+

    | log_bin_trust_function_creators | ON |

    +---------------------------------+-------+

    1 row in set (0.00 sec)

    mysql> set global log_bin_trust_function_creators=1;

    Query OK, 0 rows affected (0.00 sec)

    mysql> show variables like '%fun%';

    +---------------------------------+-------+

    | Variable_name | Value |

    +---------------------------------+-------+

    | log_bin_trust_function_creators | ON |

    +---------------------------------+-------+

    1 row in set (0.00 sec)

    如果是在有master上开启了该参数,记得在slave端也要开启这个参数(salve需要stop后再重新start),否则在master上创建函数会导致replaction中断。

    案例三:

    Error Code : 1418This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

    (0 ms taken)

    分析:

    根据系统提示,导致该错误的原因可能是一个安全设置方面的配置,查手册log_bin_trust_function_creators参数缺省0,是不允许function的同步的,一般我们在配置repliaction的时候,都忘记关注这个参数,这样在master更新funtion后,slave就会报告错误,然后slave stoped。

    处理过程:

    登陆mysql数据库> set global log_bin_trust_function_creators = 1;

    > start slave;

    跟踪mysql的启动日志,slave正常运行,问题解决。

    相关推荐:

    展开全文
  • MySQL 创建函数(Function)

    2021-01-18 18:27:03
    目标怎么样MySQL创建数据库功能(Function)语法CREATE FUNCTION func_name ( [func_parameter] ) //括号是必须的,參数是可选的RETURNS type[ characteristic ...] routine_bodyCREATE FUNCTION 用来创建函数的...

    目标

    怎么样MySQL创建数据库功能(Function)

    语法

    CREATE FUNCTION func_name ( [func_parameter] ) //括号是必须的,參数是可选的

    RETURNS type

    [ characteristic ...] routine_body

    CREATE FUNCTION 用来创建函数的keyword;

    func_name 表示函数的名称;

    func_parameters为函数的參数列表,參数列表的形式为:[IN|OUT|INOUT] param_name type

    IN:表示输入參数。

    OUT:表示输出參数;

    INOUT:表示既能够输入也能够输出;

    param_name:表示參数的名称;

    type:表示參数的类型,该类型能够是MySQL数据库中的随意类型;

    RETURNS type:语句表示函数返回数据的类型;

    characteristic: 指定存储函数的特性,取值与存储过程时同样,具体请訪问-MySQL存储过程使用;

    演示样例

    创建演示样例数据库、演示样例表与插入样例数据脚本:

    create database hr;

    use hr;

    create table employees

    (

    employee_id int(11) primary key not null auto_increment,

    employee_name varchar(50) not null,

    employee_sex varchar(10) default '男',

    hire_date datetime not null default current_timestamp,

    employee_mgr int(11),

    employee_salary float default 3000,

    department_id int(11)

    );

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('David Tian','男',10,7500,1);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Black Xie','男',10,6600,1);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Moses Wang','男',10,4300,1);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Rena Ruan','女',10,5300,1);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Sunshine Ma','女',10,6500,2);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Scott Gao','男',10,9500,2);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Warren Si','男',10,7800,2);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Kaishen Yang','男',10,9500,3);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Simon Song','男',10,5500,3);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Brown Guan','男',10,5000,3);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Eleven Chen','女',10,3500,2);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Cherry Zhou','女',10,5500,4);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Klause He','男',10,4500,5);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Maven Ma','男',10,4500,6);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Stephani Wang','女',10,5500,7);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Jerry Guo','男',10,8500,1);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Gerardo Garza','男',10,25000,8);

    insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Derek Wu','男',10,5500,5);

    select * from employees;

    d5a2a2712cc5834cca209997ff181dcf.png

    创建函数-依据ID获取员工姓名与员工工资

    DELIMITER //

    CREATE FUNCTION GetEmployeeInformationByID(id INT)

    RETURNS VARCHAR(300)

    BEGIN

    RETURN(SELECT CONCAT('employee name:',employee_name,'---','salary: ',employee_salary) FROM employees WHERE employee_id=id);

    END//

    DELIMITER ;

    调用函数

    在MySQL——函数的用法与MySQL内部函数的用法一样。

    1f6fea5dc444b82fc5a8eba7a34b93f0.png

    假设您们在尝试的过程中遇到什么问题或者我的代码有错误的地方,请给予指正,很感谢!

    联系方式:david.louis.tian@outlook.com

    版权@:转载请注明出处。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

    展开全文
  • MySQL创建函数(过程)在Navicat中创建函数(过程);点击new function按钮创建函数(过程)弹出下图:选择创建过程还是函数,创建步骤相似,这里以创建过程为例选择Procedure,如下图:如需传入参,在该页面中做相应编辑...

    MySQL创建函数(过程)

    在Navicat中创建函数(过程);

    点击new function按钮创建函数(过程)

    弹出下图:

    选择创建过程还是函数,创建步骤相似,这里以创建过程为例

    选择Procedure,如下图:

    如需传入参,在该页面中做相应编辑,如下图:

    注:Mode:IN|OUT|INOUT:::IN,仅能从外部往过程内部传递参数,过程内部对参数的改变不影响外部;OUT,仅能从过程内部向外部传递值,不能从外部传入内部;INOUT:结合IN和OUT,过程之后影响过程内外该参数的值。

    如果过程不需传递参数,直接点击Finish,注:过程不返回值,如下图:

    在BEGIN和END之间输入函数代码,然后编辑Advanced、Comment、选项卡,最后点击SQL

    Preview预览函数,如下图:

    然后点击工具栏中的【保存】按钮,输入过程名完成过程创建。

    创建函数

    点击Next,设置返回值类型和返回值属性,如下图

    点击Finish

    完。。。

    函数说明

    1、MySQL不支持变量做表名,简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名,因此MySQL不支持变量做表名,解决的办法是将整条sql语句作为变量,其中穿插存表名的变量,然后调用,然后调用EXECUTE

    执行这条sql语句。

    2、MySQL函数中不支持数组,如何把多个值循环操作,解决的办法是将需要循环操作的值放到数据库中的一个表中,然后循环读取表中的数据获取操作值。

    举例如下:一个程序的代码

    CREATE PROCEDURE `CalBMZJ`()

    COMMENT '每月一号凌晨一点自动计算部门资金过程'

    BEGIN

    DECLARE last_month VARCHAR(10);#上一个月

    DECLARE last_month2 VARCHAR(10);#上一个月带%

    DECLARE bmCount INT;#部门数量

    DECLARE tableCount INT;#要计算的表的数量

    DECLARE bm VARCHAR(5);

    DECLARE tableIOrgid varchar(20);#table表对应部门字段名

    DECLARE tableName VARCHAR(20);#表名

    DECLARE fieldCal VARCHAR(20);#要统计的字段名

    DECLARE sj varchar(10);#时间字段

    DECLARE sJslx VARCHAR(20);#结算类型

    DECLARE i INT DEFAULT 0;

    DECLARE j INT DEFAULT 0;

    DECLARE cur_time DATETIME DEFAULT NOW();#当前时间(统计时间)

    SELECT DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 MONTH),'%Y-%m')

    INTO last_month;

    set last_month2= CONCAT(last_month,'%');

    SELECT COUNT(I_ORGID) INTO bmCount FROM bm_cal_table;

    SELECT COUNT(TABLE_NAME) INTO tableCount FROM bm_cal_table;

    WHILE i< bmCount DO#外部循环

    SELECT I_ORGID INTO bm FROM bm_cal_table

    LIMIT i,1;

    SET i = i+1;

    SET j =0;

    WHILE j

    SELECT

    TABLE_NAME INTO tableName FROM bm_cal_table LIMIT j,1;

    SELECT FIELD_CAL

    INTO fieldCal FROM bm_cal_table LIMIT j,1;

    SELECT S_JSLX

    INTO sJslx FROM bm_cal_table LIMIT j,1;

    SELECT FIELD_SJ INTO sj FROM bm_cal_table LIMIT j,1;

    SELECT TABLE_IORGID INTO tableIOrgid FROM bm_cal_table LIMIT

    j,1;

    SET @sum2=0;#统计用,用declare定义的不能用

    set @sqlCmd = CONCAT('SELECT SUM(', fieldCal, ') INTO ',

    '@sum2', ' FROM ', tableName, ' WHERE ',tableIOrgid, ' IN(', bm, ')

    AND ', sj, ' LIKE "',last_month2,'"');

    PREPARE exSql FROM @sqlCmd;#这条必须

    EXECUTE exsql;#执行sql语句变量

    INSERT INTO

    FS_ORGFUND_INFO(TASK_STATE,I_ORGID,S_BMFZR,S_JSLX,D_JSJE,D_JSSJ,S_BZ,S_TYPE)

    VALUES('自动统计',bm,"bmfzr",sJslx,@sum2,cur_time,'备注',1);

    SET j=j+1;

    END WHILE;#必须带分号

    END WHILE;

    END

    上边程序从数据库中的bm_cal_table表中读取需要得到的数据,通过计算表中的对应字段的记录数得到循环变量I,j的值。

    3、在函数中每条语句结束都要带分号,包括循环体

    4、在函数中要将查找的值赋给一个变量,需要使用INTO 关键字,如SELECT I_ORGID INTO bm FROM

    bm_cal_table LIMIT i,1;

    5、可以使用SET语句对一个变量简单赋值,如:SET j =0;

    6、DECLARE定义的局部变量在要执行的变量语句中不能够赋值,需要使用SET

    定义全局变量,如:SET @sum2=0;注,在语句中直接使用未定义的全局变量也可以

    7、sql语句的变量也是全局变量

    8、DECLARE用于定义局部变量

    展开全文
  • 大家好,帮我看看下面的mysql函数有什么问题?一直创建不了.DELIMITER $$DROP FUNCTION IF EXISTS check_if_exists$$CREATE FUNCTION check_if_exists(object_name VARCHAR(100),db_name VARCHAR(100),object_type ...
  • mysql创建函数报错1418

    2021-08-10 16:39:23
    问题描述:翻译后得知:缺乏安全设置方面的配置 解决: 登录mysql后执行如下sql即可 set global log_bin_trust_function_creators = 1;
  • Mysql创建函数出错

    2021-02-02 05:46:03
    目前在项目中,执行创建mysql的函数出错,mysql 创建函数出错信息如下:Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation首先检查创建函数的功能是否开启,...
  • [u1是执行者,u2是定义者] 同理:当为INVOKER的时候,mysql会检查u1是否有execute函数f的权限,如果有,继续看u1是否有访问a记录的权限 COMMENT 'string':注释 具体参考mysql5.1参考手册第20章存储过程和函数
  • 创建function时,总是报下面的错误。可是检查过,没有什么语法问题。其实有些是分隔符引起的。 #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version...
  • ) -- 贴出mysql 语句 DROP FUNCTION IF EXISTS fun_getGameAreaNameBySonId; CREATE FUNCTION fun_getGameAreaNameBySonId (in_str varchar(255)) RETURNS varchar(255) BEGIN DECLARE i int DEFAULT 0; DECLARE fid...
  • 例如 create PROCEDURE insert_address( in p_name varchar(30), in p_phone varchar(30), in p_address varchar(100), in p_uid int(10), in p_def int(3) ) ... // 就能创建成功了,找到函数,右键刷新一下就有了
  • 像是加载Windows下的dll文件或Linux下的so文件用的找到这么段东西:mysql> help sonameName: 'CREATE FUNCTION'Description:Syntax:CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|...
  • 我在数据库的部门表里存的树形结构,在已知子部门时向上查找所有父级部门,写的函数如下CREATE FUNCTION queryAllDept(@currdeptid varchar(50))returns varchar(200)BEGIN declare @allname varchar(200) DEFAULT '...
  • 在使用MySQL数据库时,有时会遇到...案例一:目前在项目中,执行创建mysql的函数出错,mysql 创建函数出错信息如下:Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this...
  • mysql中可以通过语法“CREATE FUNCTION func_name ( [func_parameter] )”来创建函数,其中“CREATE FUNCTION”是用来创建函数的关键字。推荐:《mysql视频教程》在MySQL数据库中创建函数(Function)语法CREATE ...
  • mysql里怎样创建函数

    2021-01-18 18:27:03
    mysql创建函数的方法:首先查看创建函数的功能是否开启;然后如果Value处值为OFF,则需将其开启;接着创建函数时,先选择数据库;最后进行测试即可。更多相关免费学习推荐:mysql教程(视频)mysql创建函数的方法...
  • MysqL教程MysqL 创建函数出错的解决方案,希望对您有用。如果有疑问,可以联系我们。在使用MysqL数据库时,有时会遇到MysqL函数不能创建的情况.下面就教您一个解决MysqL函数不能创建问题的办法,供您借鉴参考.目前在...
  • mysql创建函数,报错误码: 1418This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_...
  • Navicat for MySQL过程和函数是一组可以保存在服务器上的 SQL 语句。一旦这项工作完成,客户端不需要再发出个别的语句,可以参考存储例程。本教程Navicat官网提醒用户需要注意的是,过程和函数(存储例程)适用于 ...
  • MySQL创建函数报ERROR 1418错误,不能创建函数,根据官方提示是说,不能创建函数可能是一个安全设置方面的配置或功能未开启原因,下面我们一起来看。错误ERROR 1418 (HY000): This function has none of ...
  • MYSQL 创建函数出错的解决方案在使用MySQL数据库时,有时会遇到MySQL函数不能创建的情况。下面就教您一个解决MySQL函数不能创建问题的方法,供您借鉴参考。案例一:目前在项目中,执行创建mysql的函数出错,mysql ...
  • 我们在使用mysql数据库开发项目的时候,有时Mysql系统自带的函数不能完全满足我们开发的需要,解决方法是自己创建函数,可以有可能在你创建函数的过程事会报出Error1418错误,对于报这种错误的详细信息如所所示出错...
  • mysql 在sqlyog创建函数

    2021-07-05 21:25:47
    DELIMITER $$ CREATE FUNCTION myselect3() RETURNS INT BEGIN DECLARE c INT; SELECT id FROM class WHERE cname="python" INTO c; RETURN c; END$$ //这儿要是新设的$$,如果delimiter不改,sqlyog处理分号...
  • 1. 创建测试自定义函数(1)CREATE DEFINER=`dbdh`@`localhost` FUNCTION `test`.`sp_function_dbdh_three`() RETURNS varchar(255) CHARSET utf8BEGINDECLARE l_NEW_STR VARCHAR(255); -- 定义变量DECLARE l_NAYIBU_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 319,697
精华内容 127,878
关键字:

mysql创建函数

mysql 订阅