Как мне написать процедуру, которая будет проверять следующий свободный номер (который является строкой) на основе ввода.Процедура должна иметь 2 входных значения, первое - это пользовательский ввод (числа), а второе - максимальное количество символов в строке.
Это процедура, которую я пытался написать:
CREATE DEFINER=`root`@`localhost` PROCEDURE `getfreenum`(IN num CHAR(20), IN maxval CHAR(20))
begin
set @compare := (num + num *10);
set @maxId := (select sifra from artikli where sifra >= @compare order by sifra asc limit 1);
while @compare = @maxId do
set @compare := @compare + 1;
set @maxId = (select sifra from artikli where sifra >= @compare order by sifra asc limit 1);
end while;
select @compare;
end
ЭтоПроцедура находит мне следующее доступное значение после моего ввода, но оно не включает мой ввод в это число, то есть, если я вызываю процедуру Call getfreenum(1,5)
, я получаю значение 779
, но я должен получить следующее значение 5 символов, которое включает в себя номер ввода, который является 1
.
Таким образом, процедура Call getfreenum(1,5)
должна вернуть 10043, если все взято из 10000 до 100042 включительно, а Call getfreenum(11,5)
должна проверить оставшиеся 3 символа и вернуть, скажем, 11000. Или 11600, если все взято из 11000 в11599. И он должен работать так же для каждого ввода, даже если я введу 4 символа: Call getfreenum(1234,5)
процедура должна проверить 12340, 12341, 12342 и, если 12349 свободна, она должна вернуть это, но она не должна возвращать значение, которое изменяет вводчисло, означающее, что если я вызываю Call getfreenum(1234,5)
и все берется, включая '123459', то функция должна возвращать NULL или некоторое фиксированное значение для всех ошибок.