[英]Stored procedure error when being called
When I call my procedure, it return an error: 当我调用过程时,它返回一个错误:
1064 - You have an error in your SQL syntax;
1064-您的SQL语法有误; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1
检查与您的MySQL服务器版本相对应的手册,以在第1行的'NULL'附近使用正确的语法
How to fix it, do I have an error in my procedure code? 如何解决它,我的程序代码是否有错误?
Here is my stored procedure : 这是我的存储过程:
DELIMITER $$
DROP PROCEDURE IF EXISTS `gamedb`.`ALIAS#SEARCH`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ALIAS#SEARCH`(
in section_id varchar(255),
in category_id varchar(255),
in content_id varchar(255)
)
BEGIN
declare q varchar(4000);
set @q = 'SELECT * FROM tbl_alias WHERE ALIAS_ACTIVE_STATUS=1';
IF section_id IS NOT NULL THEN
set @q = concat(q,' AND ALIAS_SECTION_ID = ',section_id);
END IF;
IF category_id IS NOT NULL THEN
set @q = concat(q,' AND ALIAS_CATEGORY_ID = ',category_id);
END IF;
IF content_id IS NOT NULL THEN
set @q = concat(q,' AND ALIAS_CONTENT_ID = ',content_id);
END IF;
set @q= concat(q,' ORDER BY ALIAS_ID DESC');
prepare stmt from @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
There several problems 有几个问题
PREPARE
only from user variable, you don't need a local variable q
PREPARE
从用户变量而已,你并不需要一个局部变量q
You're missing @
for @q
variable when using CONCAT()
使用
CONCAT()
时, @q
缺少@
for @q
变量
set @q = concat(q,' AND ALIAS_SECTION_ID = ',section_id); ^
IN
parameters defined as VARCHAR
you better quote their values when you build the query IN
参数定义为VARCHAR
,因此在构建查询时最好引用它们的值 That being said your SP might look like this 话虽如此,您的SP可能看起来像这样
DELIMITER $$
CREATE PROCEDURE `ALIAS#SEARCH`(
in section_id varchar(255),
in category_id varchar(255),
in content_id varchar(255)
)
BEGIN
SET @q = 'SELECT * FROM tbl_alias WHERE ALIAS_ACTIVE_STATUS = 1';
IF section_id IS NOT NULL THEN
SET @q = CONCAT(@q, ' AND ALIAS_SECTION_ID = ''', section_id, '''');
END IF;
IF category_id IS NOT NULL THEN
SET @q = CONCAT(@q, ' AND ALIAS_CATEGORY_ID = ''', category_id, '''');
END IF;
IF content_id IS NOT NULL THEN
SET @q = CONCAT(@q, ' AND ALIAS_CONTENT_ID = ''', content_id, '''');
END IF;
SET @q = CONCAT(@q, ' ORDER BY ALIAS_ID DESC');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.