jdbc mysql 自定义函数_JDBC向mysql添加自定义函数的错误与解决方法

注:方法体中涉及的表和function方体体都不是重点。

先贴出在数据中能执行的sql代码:

DELIMITER $$

DROP FUNCTION IF EXISTS `f_continuty_days`$$

CREATE

FUNCTION f_continuty_days(id INT)

RETURNS INT

DETERMINISTIC

READS SQL DATA

BEGIN

DECLARE days INT;

DECLARE flag INT;

DECLARE previous_day DATE;

SET days = 0;

SET flag = 1;

SET previous_day = DATE_SUB(CURDATE(),INTERVAL 1 DAY);

WHILE flag>0 DO

SELECT COUNT(DISTINCT(DATE(soidv.USE_DATE))) INTO flag FROM driver_in di LEFT JOIN SI si ON di.ID=si.DRIVER_IN_ID

WHERE di.ID=id

AND si.STATUS <> 9

AND DATE(si.USE_DATE) = previous_day ;

IF flag > 0 THEN

SET days = days + 1;

SET previous_day = DATE_SUB(previous_day,INTERVAL 1 DAY);

END IF;

END WHILE;

RETURN days;

END$$

这段sql复制到java执行却不行,然后将这段代码分成两部分 分别执行就可以。

第一部分:

DROP FUNCTION IF EXISTS `f_continuty_days`

第二部分:

CREATE

FUNCTION f_continuty_days(id INT)

RETURNS INTDETERMINISTIC

READS SQL DATA

BEGIN

DECLARE days INT;

DECLARE flag INT;

DECLARE previous_day DATE;

SET days = 0;

SET flag = 1;

SET previous_day = DATE_SUB(CURDATE(),INTERVAL 1 DAY);

WHILE flag>0 DO

SELECT COUNT(DISTINCT(DATE(soidv.USE_DATE))) INTO flag FROM driver_in di LEFT JOIN SI si ON di.ID=si.DRIVER_IN_ID

WHERE di.ID=id

AND si.STATUS <> 9

AND DATE(si.USE_DATE) = previous_day ;

IF flag > 0 THEN

SET days = days + 1;

SET previous_day = DATE_SUB(previous_day,INTERVAL 1 DAY);

END IF;

END WHILE;

RETURN days;

END

(其中

DETERMINISTIC

READS SQL DATA 作用:如果数据库开启了bin-log,申明函数中sql只读数据不做修改)

虽然解决了,但是原因不明,可能会对其他东西有影响,谨慎使用。这里的方法可能也不是最好的解决方法。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值