请问在mysql中能不能动态构造sql语句,然后在执行这条sql语句呢?
比如我现在有个叫myprocedure的存储过程,有10个以上的输入参数,而且都为int型的,现在就是想在存储过程体中根据传进来的参数的值判断,如果param1大于0的话,那么该参数就会就做为一条查询语句的where条件之一构造进去.
如果可以的话应该怎么写呢?在程序里动态构造sql语句的情况因为某种原因在这里暂时不考虑,目前只讨论在mysql下或其它数据库下有没有这个功能实现呢!!
比如我现在有个叫myprocedure的存储过程,有10个以上的输入参数,而且都为int型的,现在就是想在存储过程体中根据传进来的参数的值判断,如果param1大于0的话,那么该参数就会就做为一条查询语句的where条件之一构造进去.
如果可以的话应该怎么写呢?在程序里动态构造sql语句的情况因为某种原因在这里暂时不考虑,目前只讨论在mysql下或其它数据库下有没有这个功能实现呢!!
然后declare一个变量再将传入的值set给它,在select语句中直接用这个变量当条件
DELIMITER $$DROP PROCEDURE IF EXISTS `mydb`.`test2`$$
CREATE PROCEDURE `mydb`.`test2` (in p1 int,in p2 int)
BEGIN
declare str varchar(250);
set str='select * from tb where 1=1';
if(p1>=0) then
set str=str||" and field1="||p1;
end if;
if(p2>=0) then
set str=str||" and field2="||p2;
end if;
set @s=str;
PREPARE stmt2 FROM @s;
EXECUTE stmt2 ;
DEALLOCATE PREPARE stmt2;END$$DELIMITER ;
编译能通过,但是一调用的话就报错,经过调试发现sql语句是经过||或+符号构造出来的就会报错,但是我需要类似的作用,请问应该怎么处理呢?谢谢!