请问在mysql中能不能动态构造sql语句,然后在执行这条sql语句呢?
比如我现在有个叫myprocedure的存储过程,有10个以上的输入参数,而且都为int型的,现在就是想在存储过程体中根据传进来的参数的值判断,如果param1大于0的话,那么该参数就会就做为一条查询语句的where条件之一构造进去.
如果可以的话应该怎么写呢?在程序里动态构造sql语句的情况因为某种原因在这里暂时不考虑,目前只讨论在mysql下或其它数据库下有没有这个功能实现呢!!

解决方案 »

  1.   

    用in传入存储过程
    然后declare一个变量再将传入的值set给它,在select语句中直接用这个变量当条件
      

  2.   

    我有一个这样的存储过程
    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语句是经过||或+符号构造出来的就会报错,但是我需要类似的作用,请问应该怎么处理呢?谢谢!
      

  3.   

    把字符连接改为用concat函数就可以拉