问题描述
我之前已经看到过常见的在查询错误期间与MysqL服务器的丢失连接,其中包含大型数据集等。我没有看到但现在看到的是运行SHOW CREATE FUNCTION
时的消息。该函数只有大约20行长,并且似乎没有语法错误。我能够删除并重新创建它而没有问题(使用备份中的定义)。如果使用不同的名称创建相同的函数,则不会出错。但是使用原始名称,我得到了错误。我该怎么做才能解决此问题?
有关功能:
DELIMITER$$
DROP FUNCTION IF EXISTS `check_address`$$
CREATE FUNCTION `check_address`(
_loan_id BIGINT,_address1 VARCHAR(255),_address2 VARCHAR(255),_city VARCHAR(255),_state VARCHAR(255),_zip VARCHAR(255)
) RETURNS tinyint(1)
DETERMINISTIC
sql Security INVOKER
BEGIN
DECLARE _cur_address1 VARCHAR(255);
DECLARE _cur_address2 VARCHAR(255);
DECLARE _cur_city VARCHAR(255);
DECLARE _cur_state VARCHAR(255);
DECLARE _cur_zip VARCHAR(255);
DECLARE _is_ok tinyint(1);
DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN SET _is_ok = NULL; END;
SELECT
property_address.address_1,property_address.address_2,property_address.city,property_address.state_abrv,property_address.zip_id
INTO
_cur_address1,_cur_address2,_cur_city,_cur_state,_cur_zip
FROM property_address WHERE property_address.loan_id = _loan_id;
SELECT IF(LOWER(TRIM(BOTH FROM _cur_address1)) = LOWER(TRIM(BOTH FROM _address1)),1) +
IF(LOWER(TRIM(BOTH FROM _cur_address2)) = LOWER(TRIM(BOTH FROM _address2)),1) +
IF(LOWER(TRIM(BOTH FROM _cur_city)) = LOWER(TRIM(BOTH FROM _city)),1) +
IF(LOWER(TRIM(BOTH FROM _cur_state)) = LOWER(TRIM(BOTH FROM _state)),1) +
IF(LOWER(TRIM(BOTH FROM _cur_zip)) = LOWER(TRIM(BOTH FROM _zip)),1)
INTO _is_ok;
RETURN _is_ok;
END$$
编辑:其他有趣的细节:
这些作品:
-
SHOW CREATE FUNCTION dbname.check_address;
-
SHOW CREATE FUNCTION dbname.`check_address`;
-
SHOW CREATE FUNCTION `dbname`.check_address;
这不是:
-
SHOW CREATE FUNCTION `dbname`.`check_address`;
MysqL --version
的输出(是的,它很旧-不受我的控制):
MysqL Ver 14.14 distrib 5.6.35-80.0,for Linux (x86_64) using 5.1
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)