mysql - YA MySQL Error #1064 in CALL

标签 mysql stored-procedures mysql-error-1064

我创建了以下存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `ABON_PLATA`(DATE_BAL1 datetime)
BEGIN
        DECLARE IMSI1 varchar(6);
        DECLARE DATE1 datetime;
        DECLARE ID_U1 integer;
        DECLARE PAY1 double;
        DECLARE PAYSUM double;
        DECLARE OLD1 double;
        DECLARE REASON1 varchar(16);
        DECLARE FLAG integer DEFAULT 0;
        DECLARE C1 CURSOR FOR SELECT ID_U FROM podkl_otkl_uslug WHERE IMSI1=IMSI;
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET FLAG=1;

OPEN C1;
     REPEAT
        FETCH C1 INTO ID_U1;
                IF FLAG=0 THEN
                SELECT SUM(PAY) INTO PAY1 FROM uslugi WHERE ID_U1=ID_U AND DATE_PODKL<DATE_BAL1 AND DATE_OTKL IS NULL;
                SET REASON1 = 'ABON PLATA';
                SET DATE1 = DATE_BAL1;
                SET PAYSUM = `NEW`-PAY1;
                SET OLD1 = `NEW`;
              END IF;
        INSERT history (`DATE`, REASON, `NEW`, OLD, IMSI) VALUES (DATE1, REASON1, PAYSUM, OLD1, IMSI1);
        UNTIL FLAG=1
     END REPEAT;
CLOSE C1;
END

用于模拟移动运营商的订阅费。当我试图调用它时,我得到了臭名昭著的错误:

CALL ABON_PLATA(2013-07-07 12:00:00);

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '12:00:00)' at line 1

考虑到这是第 1 行的错误,我感到非常困惑。我错过了什么非常明显的东西?

最佳答案

日期时间文字必须用引号引起来。

CALL ABON_PLATA('2013-07-07 12:00:00');

它在第 1 行报告错误的原因是 CALL 行包含错误。它与您的过程代码无关,因为错误发生在它甚至可以调用您的过程之前。


回复你的评论:

Thread stack overrun: 6892 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack.

这表明您的 MySQL 的 thread_stack 配置值太小,无法在存储过程中运行语句。例如,如果您使用与某些 MySQL 版本捆绑在一起的 my-small.cnf 配置文件,就会发生这种情况。

增加配置文件中thread_stack 的值。默认值为 256K,只有 my-small.cnf 将其设置得更低。有一个bug logged关于此设置太低。

在对配置文件进行此更改后,不要忘记重新启动 MySQL 服务。

关于mysql - YA MySQL Error #1064 in CALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18800211/

相关文章:

mysql - SQL 语法错误;检查与您的 MySQL 服务器版本相对应的手册,了解在附近使用的正确语法

.net - 自动生成的 mysql 成员/配置文件和角色提供者表中的错误

mysql - 在连接表而不是实际表上使用查询

php - 如何使用sqlsrv和 "?"样式参数在php中执行存储过程

mysql - MySQL存储过程中有三元运算符吗?

mysql - 为什么我不能使用这个参数?

php - MySQL 中出现 1064 错误但查询仍然完成?不知道为什么!

java - 需要在 5 秒内使用 hibernate 在 mysql 中插入 100000 行

sql - SQL `order` .id 未知列中的变量范围

php - 使用 CI 捕获 SIGNAL SQLSTATE 消息