0

我有一个过程 A 需要一个字符串数组。通过调用另一个过程 B,我以这种格式打破了这个数组:

 '1','2','3','4'

如果只有一个值,则显示为'1'

如果数组传递给过程A,我想返回*。因此,我的查询将是这样的:select * from users where userId(*); 我想要的是,如果参数为空,它仍然应该执行IN使用。

** 编辑 ** 没什么查询

CREATE DEFINER=`root`@`localhost` PROCEDURE `listAll`(IN id varchar(200))
BEGIN
    set @t = lib_explode(',',id);

     select * from city where ID in(@t);
END

程序 B

CREATE DEFINER=`root`@`localhost` FUNCTION `lib_explode`(sSepar VARCHAR(255), saVal TEXT) RETURNS varchar(200) CHARSET utf8
body:
BEGIN

IF sSepar IS NULL OR saVal IS NULL THEN LEAVE body; END IF;

  SET @saTail = saVal;
  SET @iSeparLen = LENGTH( sSepar );
  set @mystring = '';
set @current_pos = 1;
create_layers:
  WHILE @saTail != '' DO

    # Get the next value
    SET @sHead = SUBSTRING_INDEX(@saTail, sSepar, 1);
    SET @saTail = SUBSTRING( @saTail, LENGTH(@sHead) + 1 + @iSeparLen );
   -- INSERT INTO lib_Explode SET val = @sHead;
    if(@current_pos > 1) then
   set @mystring = concat(@mystring,',',concat("'",@shead,"'"));
    else 
    set @mystring = concat(@mystring,concat("'",@shead,"'"));
    end if;
    set @current_pos = @current_pos + 1;

  END WHILE;
return @mystring;
END
4

0 回答 0