mysql error (#1064) 存储过程创建错误

Posted

技术标签:

【中文标题】mysql error (#1064) 存储过程创建错误【英文标题】:mysql error (#1064) stored procedure creation error 【发布时间】:2014-12-17 23:49:00 【问题描述】:

我正在尝试创建一个存储过程,但我不断收到错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT ''B' 附近使用正确的语法

我的SQL如下:

DELIMITER $$
CREATE FUNCTION `prodcat_descendants` (idcat INTEGER(11) )
    RETURNS VARCHAR
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
   RETURN (select GROUP_CONCAT(DISTINCT id_category SEPARATOR ',') from cms_prodcategories where id_parent=idcat and active='1');
END$$

我尝试包含 DELIMITER 但没有结果。我想问题可能出在引号中。 有人可以指出我的解决方案吗? 谢谢!

mysql 5.5 版

【问题讨论】:

【参考方案1】:

您需要在过程的返回语句上设置一个 varchar 长度,例如

RETURNS VARCHAR(1024)

所以程序变成了

DELIMITER $$
CREATE FUNCTION `prodcat_descendants` (idcat INTEGER(11) )
    RETURNS VARCHAR(1024)
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
   RETURN (select GROUP_CONCAT(DISTINCT id_category SEPARATOR ',') from cms_prodcategories where id_parent=idcat and active='1');
END; $$

【讨论】:

谢谢。 VARCHAR 定义存在问题,但出现新错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 9 行的 '' 附近使用正确的语法 - 使用 phpmyadmin 用 SQL Manager 试过了,但它工作但首先我需要设置这个 GLOBAL:SET GLOBAL log_bin_trust_function_creators = 1;谢谢!

以上是关于mysql error (#1064) 存储过程创建错误的主要内容,如果未能解决你的问题,请参考以下文章

运行存储过程时出错 ERROR 1064 (42000)

解决mysql 8报错 ERROR 1064 (42000): You have an error in your SQL syntax

解决mysql 8报错 ERROR 1064 (42000): You have an error in your SQL syntax

mysql error code '1064' 排查过程

#1064 - MySQL 服务器版本在“END”错误附近使用正确的语法?

mysql phpmyadmin 中的存储过程 #1064