有MySQL存储过程的问题

时间:2012-05-01 08:42:07

标签: mysql stored-procedures

在下面的程序中我有两个参数 - 当我运行时应该填充两个参数。 我希望这些参数是可选的,如果我填充第一个数据应该基于一个参数进行过滤,如果我填充secand一个并且保留null第一个数据应该基于secand参数进行过滤,如果我传递了两个参数它应该基于过滤器两个参数,如果我没有传递一个参数,它不应该被过滤。

DROP PROCEDURE IF EXISTS medatabase.SP_rptProvince2;
CREATE PROCEDURE medatabase.`SP_rptProvince2`(
IN e_Region VARCHAR(500),
IN e_Province VARCHAR(500)
)
BEGIN

  DECLARE strQuery VARCHAR(1024);
  DECLARE stmtp   VARCHAR(1024);


    SET @strQuery = CONCAT('SELECT * FROM alldata where 1=1 ');
   -- IF e_region IS NOT NULL THEN


    -- SET @strQuery = CONCAT(@strQuery, 'AND regionName'=e_Region);
   -- END IF;

    IF e_Region IS NOT NULL THEN
        SET @strQuery = CONCAT(@strQuery, ' AND regionName = "',e_Region,'"');


    IF e_Province IS NOT NULL THEN
        SET @strQuery = CONCAT(@strQuery, ' AND provinceName = "',e_Province,'"');

   END IF;
   END IF;

  PREPARE  stmtp FROM  @strQuery;
  EXECUTE  stmtp;
 End;

1 个答案:

答案 0 :(得分:2)

MySQL程序不支持可选参数。你必须做你目前正在做的事情(传入并测试NULL)。