文字列の配列を取るプロシージャ 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