MySQL存储过程条件不起作用

时间:2014-06-10 19:28:19

标签: mysql stored-procedures conditional-statements

我有一些脚本可以为表创建自定义ID。我正在检查日期的最后一个ID,加上一个,并将新值存储在我的连续表中。

有完整的代码:

CREATE DEFINER=`somuser`@`somewhere` FUNCTION `get_id_est`(fecha date) RETURNS char(14) CHARSET latin1
    MODIFIES SQL DATA
BEGIN
DECLARE anterior INTEGER DEFAULT 0;
DECLARE retval char(14);
DECLARE fechaserv char(6);

SET fechaserv = date_format(fecha, '%y%m%d');

select max(consecutivo) into retval from dias group by fecha having fecha = fechaserv;

SET anterior = (anterior + 1);
if anterior = 1 then 
    INSERT INTO dias (fecha, consecutivo) VALUES (fechaserv, anterior);
else 
    UPDATE dias SET consecutivo = anterior where fecha = fechaserv;
end if;
SET retval = concat('EZ', fechaserv,'-', LPAD(anterior,5,'0'));
RETURN retval;

END

如果我运行以下命令来测试使用此值的最大值:

CREATE DEFINER=`somuser`@`somewhere` FUNCTION `get_id_est`(fecha date) RETURNS char(14) CHARSET latin1
    MODIFIES SQL DATA
BEGIN
DECLARE anterior INTEGER DEFAULT 0;
DECLARE retval char(14);
DECLARE fechaserv char(6);

SET fechaserv = date_format(fecha, '%y%m%d');

select max(consecutivo) into retval from dias group by fecha having fecha = fechaserv;
return retval;
end

然后我执行以下查询:

mysql> select crea_id_est('2013-12-01');
+---------------------------+
| crea_id_est('2013-12-01') |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

但是......如果我只检查查询,我会得到这个:

mysql> select max(consecutivo) from dias group by fecha having fecha = '131201';
+------------------+
| max(consecutivo) |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

这是相同的查询,但结果完全不同。我检查了服务器,数据库和连接的字符集,更改了它,重新加载了查询,droped并重新创建了该函数,没有任何内容。我甚至在另一台服务器上测试过......

有什么想法吗?

提前致谢。

0 个答案:

没有答案