简体   繁体   English

调用时存储过程错误

[英]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 有几个问题

  1. Since you can PREPARE only from user variable, you don't need a local variable q 既然你可以PREPARE从用户变量而已,你并不需要一个局部变量q
  2. You're missing @ for @q variable when using CONCAT() 使用CONCAT()时, @q缺少@ for @q变量

     set @q = concat(q,' AND ALIAS_SECTION_ID = ',section_id); ^ 
  3. Since your 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM