Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储过程中的语法错误_Mysql_Stored Procedures - Fatal编程技术网

MySQL存储过程中的语法错误

MySQL存储过程中的语法错误,mysql,stored-procedures,Mysql,Stored Procedures,下面的SP没有给出任何结果,即使根据where子句有48行 BEGIN DECLARE SelectClause VARCHAR(2000); if v_mode='SearchByString' then SET SelectClause ='select SURVEY_USER.username,SURVEY.* from SURVEY, SURVEY_USER'; if v_SearchString is not null then SET SelectClause=

下面的SP没有给出任何结果,即使根据where子句有48行

BEGIN
DECLARE SelectClause VARCHAR(2000);
  if v_mode='SearchByString' then
    SET SelectClause ='select SURVEY_USER.username,SURVEY.* from SURVEY, SURVEY_USER';

if v_SearchString is not null then
    SET SelectClause=CONCAT(@SelectClause,'  where ');
    Set SelectClause=CONCAT(@SelectClause,v_SearchString);
end if;
SET SelectClause=CONCAT(@SelectClause,'  order by SURVEY.created_date DESC;') ;
select SelectClause;
SET @query = SelectClause;
    PREPARE stmt FROM  @query;
    EXECUTE stmt;
 select stmt;
end if;
END
我试了很多,但没有遇到任何问题。我还尝试了select子句在不同的位置打印命令,使其无法打印。 请给我一些解决办法。 这是我正在传递的参数 v_模式='SearhByString' v\u SearchString='SURVEY\u USER.username=chiragfanse'


它应该返回48行,但不返回任何内容。

您有错误的concat函数。试试这个

if v_mode='SearchString' then
DECLARE @SelectClause varchar(2000);
SET @SelectClause =CONCAT(select (SURVEY_USER.username,SURVEY.*) from SURVEY, 'SURVEY_USER');
if SearchString is not null then
@SelectClause=CONCAT(@SelectClause, 'where' ,SearchString);
end if;
SET @SelectClause=@SelectClause
order by SURVEY.created_date DESC
execute(@SelectClause)
end if;
试试这个。如果你还需要什么,请告诉我

BEGIN

  DECLARE SelectClause VARCHAR(2000);

  IF v_mode = 'SearchString' THEN

    SET SelectClause = CONCAT('select SURVEY_USER.username,SURVEY.* from SURVEY, SURVEY_USER');

    IF SearchString IS NOT NULL THEN
      SET SelectClause = CONCAT(SelectClause, ' where ', SearchString);
    END IF;

    SET SelectClause = CONCAT(SelectClause, '  order by SURVEY.created_date DESC;');

    SET @query = SelectClause;
    PREPARE stmt FROM  @query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

  END IF;
END
  • 所有的申报都必须在一开始
  • 将@SelectClause重命名为SelectClause,因为您正在声明此变量
  • 检查SET子句的用法。我加了一个
  • 看看参考,它将帮助您执行您构建的查询

  • 包含错误消息可能会有帮助。@Devart。我编写的代码与您提供的相同,但它显示了DECLARE SelectClause VARCHAR(2000)附近的错误。我对这段代码没有问题。请显示完整的过程(创建过程…)。注意,SelectClause和@SelectClause是不同的变量;看看我的代码。先把它修好。关于上一个错误检查查询,请尝试使用SELECT语句输出它