Если предположить, что аргумент, переданный в процедуру, имеет имя arg_list
...
Если необходимо определить, является ли только несколько (любое число, отличное от нуля) записей в списке больше 2005,
Затем мы можем сделать что-то подобное в процедуре:
итератор цикла и некоторые рабочие области:
DECLARE i_ INT DEFAULT 0;
DECLARE ls_number VARCHAR(255) DEFAULT '';
DECLARE ls_greatest VARCHAR(255) DEFAULT '';
инициализировать, получить первое число в списке, первое число всписок пока самый большой:
SET i_ := 1;
SET ls_number := TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( arg_list ,','),',',i),',',-1));
SET ls_greatest := ls_number;
WHILE ls_number > '' DO
-- evaluate as numeric and compare
IF ls_number+0 > ls_greatest+0 THEN
-- the one we just got is the biggest one so far, so keep it
SET ls_greatest := ls_number;
END IF;
-- get next number in list
SET i_ := i_ + 1;
SET ls_number := TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( arg_list ,','),',',i),',',-1));
END WHILE;
-- ls_greatest now contains the largest number from the list
IF ls_greatest+0 >= 2005 THEN
-- do some code
END IF;
Примечание: это предполагает, что список в arg_list правильно сформирован и не содержит ложных запятых, например, если список был '1,2,3,,4,5'
, цикл завершился бы после обработки3