如何使用存储过程获取MYSQL动态查询?

辛格博伊

我试图使用存储过程来运行动态查询,例如,在其中发送where条件案例。

我的示例存储过程如下所示:

CREATE PROCEDURE `Storedproc`(IN getwhereconditon varchar(1000))
    BEGIN
    set @param=getwhereconditon ;
    SET @S=concat('Select * from table where (1)',@param);
    PREPARE stmt1 FROM @s;
    EXECUTE stmt1;
    END

在这里,我的存储过程的名称是Storedproc我要传递where条件详细信息的地方,当我调用存储过程时,出现此错误

错误代码:1064。检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第0行附近使用“ 0tablecol = 1”

术语

尝试

DELIMITER //
CREATE PROCEDURE myproc(IN _where VARCHAR(512))
BEGIN
  SET @sql = 'SELECT * FROM table1';
  IF COALESCE(_where, '') <> '' THEN
    SET @sql = CONCAT(@sql, ' WHERE ', _where);
  END IF;
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

或者

DELIMITER //
CREATE PROCEDURE myproc(IN _where VARCHAR(512))
BEGIN
  SET @sql = CONCAT('SELECT * FROM table1', COALESCE(CONCAT(' WHERE ', NULLIF(_where, '')), ''));
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

用法示例:

CALL myproc(NULL);
CALL myproc('name=''John''');
CALL myproc('age > 25');
CALL myproc('age < 28 OR age > 30');

这是SQLFiddle演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章