【问题标题】:MySQL - CREATE DEFINER syntax errorMySQL - CREATE DEFINER 语法错误
【发布时间】:2017-03-20 22:59:29
【问题描述】:

我正在尝试更新 MySQL 数据库中的存储函数。该更新将发布到多个设备,因此我通过 update.sql 文件进行更新。

这里是函数

DROP FUNCTION `STAFF_MPT`;
CREATE DEFINER=`jelena`@`%` FUNCTION `STAFF_MPT`(`par_stocktake_staff_id`     INT) RETURNS DECIMAL(20,0) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER BEGIN

DECLARE proc_total INT;
DECLARE proc_time INT;

SET proc_total = (SELECT SUM(quantity) FROM stocktake_scans WHERE stocktake_staff_id = par_stocktake_staff_id);

SET proc_time = (SELECT TIMESTAMPDIFF( SECOND , MIN( scan_date ) , MAX( scan_date ) ) AS area_time
    FROM stocktake_scans
    WHERE stocktake_staff_id = par_stocktake_staff_id
    );

RETURN (proc_total/proc_time)*3600;

END

刚刚测试组向我反映,使用该功能的报告没有正确生成。我尝试在 PMA SQL 查询窗口中运行代码并得到以下结果:

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 '' at line 3 

谁能告诉我我错过了什么?据此,第 3 行是空的,那么它怎么可能有语法错误呢?

【问题讨论】:

标签: mysql


【解决方案1】:

截至MySQL docs

如果使用mysql客户端程序定义一个包含分号字符的存储程序,就会出现问题。默认情况下,mysql本身将分号识别为语句分隔符,因此必须临时重新定义分隔符,以使mysql将整个存储的程序定义传递给服务器。

要重新定义 mysql 分隔符,请使用delimiter 命令。

@juergen_d 在评论中暗示:您必须使用分隔符定义您的过程:

DROP FUNCTION `STAFF_MPT`;

delimiter ||

CREATE DEFINER=`jelena`@`%` FUNCTION `STAFF_MPT`(`par_stocktake_staff_id`     INT) RETURNS DECIMAL(20,0) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER BEGIN

DECLARE proc_total INT;
DECLARE proc_time INT;

SET proc_total = (SELECT SUM(quantity) FROM stocktake_scans WHERE stocktake_staff_id = par_stocktake_staff_id);

SET proc_time = (SELECT TIMESTAMPDIFF( SECOND , MIN( scan_date ) , MAX( scan_date ) ) AS area_time
    FROM stocktake_scans
    WHERE stocktake_staff_id = par_stocktake_staff_id
    );

RETURN (proc_total/proc_time)*3600;

END

||
delimiter ;

【讨论】:

  • 谢谢!我不得不在 drop 函数部分之后放入分隔符,但它现在可以工作了 :)
  • 哦,是的,你是对的,它必须在drop 电话之后。我修好了。
  • 我现在很挑剔,这里还要一个空格分隔符;那么你的答案是 101%
猜你喜欢
  • 2012-02-19
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 2017-06-21
  • 2013-11-15
相关资源
最近更新 更多