0

文字列の配列を取るプロシージャ A があります。別のプロシージャ B を呼び出すことにより、この配列を次の形式で分割します。

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

値が 1 つしかない場合は、次のように表示されます。'1'

配列がプロシージャ A に渡された場合に返したいと思い*ます。したがって、クエリは次のようになります。select * from users where userId(*); パラメータが null の場合でも、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